Real Madrid saw its lead at the top of the Primera Liga standings cut to just one point on Saturday.
The defending champions slipped to a 2-1 loss at Espanyol, which opened the scoring after just two minutes through Albert Riera before Raul Tamudo added a second in the 53rd minute.
Sergio Ramos' reply came too late for Real, who now have Villarreal breathing down their necks in the table following a 3-1 victory over Barcelona.
Santi Cazorla got the ball rolling for the hosts after three minutes with Marcos Senna adding another from the penalty spot 11 minutes later.
Bojan Krkic halved the deficit for Barca but Villarreal made certain of the points with another Senna penalty to leapfrog their opponents in the table.
Barca slipped from second to fourth as a result of the defeat and Valencia's 4-2 victory at Deportivo La Coruna.
The visitors were up, 2-0, after 16 minutes following goals from Joaquin and Ruben Baraja.
Xisco pulled one back for Depor, but a Fernando Morientes' double proved enough for Valencia, which survived another goal from substitute Rodolfo Bodipo and the late dismissal of Ivan Helguera to claim the three points.
In Saturday's other match, Sevilla got back to winning ways with a 2-0 win at lowly Levante.
Luis Fabiano found the target twice - his second goal coming from the penalty spot - to end the Andalusian side's four-match losing streak and leave Levante rooted to the bottom of the table.