Villarreal led 2-0 at the Estadio Cornellá-El Prat thanks to goals by Moises and Jeremy Perbet either side of half-time.
Jhon Cordoba pulled one back for the hosts on 77 minutes and when the referee pointed to the spot in stoppage time, it appeared that Javier Aguirre's side had done enough to claim a dramatic point.
But Asenjo saved Sergio Garcia's penalty kick and Villarreal emerged with all three points that keep them in the hunt for a Champions League place.
García Toral's side leapfrog Real Sociedad into fifth, with both teams on 43 points but Villarreal enjoying a better goal difference. Athletic Club, on 47 points, occupy the fourth and final Champions League spot.
The result saw Espanyol remain in 10th, on 32 points from 25 matches.