Crystal Palace won their first game of the season after coming from a goal down to beat Villa at Selhurst Park.
The visitors got off to a great start when Watkins fired low past Guaita.
Less than three minutes later, Palace took the lead on the counter through Zaha, who beat the keeper with a low shot.
The hosts thought they had turned the game on its head when Jeffrey Schlupp struck after 26 minutes, only for the VAR to rule that Odsonne Edouard had been in an area where he shouldn't have been.
The VAR awarded Palace a penalty after Lucas Digne's arm was struck by a back post, with the ball going into the net.
Only a minute after replacing Edouard, substitute Jean-Philippe Mateta scored the winning goal.
On the same day that he scored a goal for Palace, he inspired Patrick Vieira's side to a deserved victory with a typically all-action display.
The team had to do it the hard way after Watkins struck for Villa, sweeping a confident shot into the bottom corner.
Palace responded strongly, however, and were back on level terms when Zaha scored on the counter just moments after Villa's penalty appeal was turned down.
The hosts pushed for a second before the break but were frustrated as Schlupp miscued a freehead before being denied by the VAR, while Edouard's appeal for a penalty was turned down.
Jordan Ayew's first-time shot was pushed away by the Villa keeper as he ran around a few Villa defenders.
Palace profited from a lengthy VAR check after Guehi's goal struck Digne's arm.
The Ivorian was involved in Palace's third, playing Tyrick Mitchell in down the left, which enabled the England full-back to cross for Mateta to condemn Villa to a second.
Luka Milivojevic's club record for most goals in a calendar year was matched by Wilshere's double.