Roy Hodgson’s team were the better in a feisty first half but Ben Foster pulled off a pair of good saves to deny Christian Benteke and James McArthur, but after the break the Hornets were quick out of the traps and took the lead via a Roberto Pereyra curler.
Fortune favoured the hosts on 70 minutes when they doubled their lead with a Jose Holebas cross-shot, but Zaha pulled one back seven minutes later to notch his 24th top-flight goal to surpass Chris Armstrong, and in stoppage-time Joel Ward sent a header just wide of the mark to ensure that Palace tasted defeat at the venue for the first time since 2009.
Things began badly for them in the warm-up when James Tomkins limped off and was replaced by Martin Kelly, but when proceedings did get underway the first 10 minutes resembled a battleground and the aftermath of which left the visitors also feeling hard-done-by.
The hosts were extremely fortunate to have their full contingent on the field after Etienne Capoue aggressively stamped on Zaha’s achilles and escaped with a booking - a decision that looked even worse two minutes later when the Palace winger also had his name taken despite not even making contact with Jose Holesbas - and then Daryl Janmaat was unpunished following a poor challenge on Patrick van Aanholt.
Eventually, a game of football broke out thanks to some fine, crisp passing by Palace which helped them carve out two excellent opportunities after fine work by ex-Hornet Andros Townsend. On the occasion of his 150th Premier League appearance, he firstly whipped a cross onto the head of Benteke which Foster did well to acrobatically swat away, and then more good work by the winger saw him create a one-on-one opportunity for McArthur which Foster again managed to thwart with a good save.
The Scotsman atoned for his miss by blocking a goalbound volley by Pereyra as the Hornets began to build up some pressure of their own, and after a double dummy by Abdoulaye Doucoure and Troy Deeney, Pereyra then fired straight into the arms of Hennessey.
Typically for a British bank holiday, rain fell throughout and as the pitch became slicker it became trickier for Hodgson’s team to execute their neat play, which saw the momentum shift a little. Just before the break Janmaat screwed wide, and then after the restart Wayne Hennessey bravely blocked a Will Hughes close-range blast with his midriff before Doucoure and Pereyra fired over in quick succession.
And on 53 minutes, the Hornets capitalised when they were at their most dominant. After winning the ball off Zaha, Craig Cathcart fed Capoue who embarked on a 40-yard run before finding Pereyra, and after cutting inside onto his right foot, he bent the ball around Hennessey’s dive and found the bottom corner to score his third of the campaign.
It took Palace 15 minutes to recover positively from the setback of falling behind and they went a whisker away from drawing level when Mamadou Sakho clipped a ball onto the chest of Benteke who saw a shot on the turn flash over the corner of crossbar and post, but that proved a big moment as on 70 minutes, Watford grabbed a second to put the game to bed.
Holebas took a throw-in on the right which was cleared to Janmaat who returned it to his fellow full-back, and after bringing the ball back onto his right foot, he attempted to send a cross into the back post but a mixture of a mis-cue and possibly the wind saw it sail over the outstretched Hennessey and into the top corner.
Things looked bleak for the Eagles at that point, but on 78 minutes they were given a lifeline when Zaha forced some boos back down the home fans’ throats. He picked the ball on the left slipped the ball between two defenders to replacement Max Meyer, and the German returned it to Zaha who flashed a shot through Foster to quickly reduce the arrears, breaking Palace’s Premier League record in the process.
The Eagles just needed one more big chance to snatch a dramatic comeback, and in the fourth minute of injury-time it arrived when a corner was sent into a packed penalty area but Ward sent a free header fractions wide of the mark to end Palace’s unbeaten run on to the road at five games.
Watford: Foster, Janmaat, Cathcart, Kabasele, Holebas, Doucoure, Capoue, Hughes, Pereyra, Deeney (Success 90), Grey (Sema 72). Subs not used: Gomes, Femina, Masina, Prodl, Mariappa.
Palace: Hennessey, Ward, Sakho, Kelly, Van Aanholt, Townsend, Milivojevic, McArthur, Schlupp (Meyer 76), Zaha, Benteke (Sørloth 85). Subs not used: Guaita, Riedewald, Kouyaté, Kaikai, Ayew.