Roy Hodgson made several changes to the side that lost 3-1 to Southampton on Tuesday evening - in came Jack Butland, Jeffrey Schlupp, James McCarthy and Gary Cahill.
As for Dean Smith, he welcomed back Ollie Watkins from suspension and Jacob Ramsey to the starting lineup, while Tyrone Mings dropped out through injury.
Villa started the game with real intent. Ollie Watkins broke in behind Joel Ward and set up Jacob Ramsey on the edge of the area. However, his shot sailed over Butland's bar.
Benteke had the first opportunity from the home side. However, he could not keep his header down from an Andros Townsend cross.
Villa would take the lead in the 17th minute through John McGinn. The Scottish midfielder hit a first timed shot from the edge of the box, which sailed out of Butland's reach.
Palace had chances through Andros Townsend, Jeffrey Schull and Gary Cahill, but nothing which threatened to cause Emiliano Martinez concern.
Palace would eventually draw level through Benteke, who scored his ninth of the season when he met a Tyrick Mitchell cross at the back post to bring the home side back into the game.
But Villa re-took the lead two minutes later. McGinn's cross into the box was taken down by Watkins, who passed to El Ghazi, who duly drilled a shit underneath Butland to restore Villa's lead.
Palace went close in the second half through Benteke, Zaha and Townsend, but the Eagles lacked the clinical touch they thoroughly needed to get back into the game.
Eberechi Eze had two opportunities in quick succession but failed to guide the ball past Martinez.
Zaha brought Palace level when his deflected shot cannoned off a Villa shirt, confused Martinez and rolled into the back of the net.
Mitchell then scored the winner, after meeting Eze's shot back at the back with his chest to send the limited number of people at Selhurst Park into raptures.