Villa took the lead after 20 seconds when John McGinn guided a shot past Ederson following Ollie Watkins' low cross.
Phil Foden, who starred once again for City, scored the equaliser after 22 minutes, finishing off a fine team move.
Rodri then converted Bernando Silva's cross to put City in front.
The game could have changed from there after John Stones was shown a red-card on the stroke of half-time for a knee-high challenge on Jacob Ramsey.
But Villa even the score eleven minutes later when Matty Cash was rightfully given his marching orders for a reckless tackle from behind on Foden.
They will be without Stones for Sunday's Carabao Cup final against Tottenham Hotspur.