The in-form forward struck his fourth goal in three games – having failed to net in his previous 18 outings – to help seal a 4-1 win.
Michy Batshuayi’s fortunate first-half opener had been briefly cancelled out by Jonny Evans after the break.
Join Independent Minds
For exclusive articles, events and an advertising-free read for just
Get the best of The Independent
With an Independent Minds subscription for just
But Zaha hit back and Evans conceded a penalty to allow Luka Milivojevic to make it 3-1, before Zaha hit a fourth on the break in injury time.
Victory allowed Palace boss Roy Hodgson to enjoy his milestone, passing Sir Bobby Robson as the oldest man to manage a Premier League game at 71 years and 198 days old.
The Eagles rose to 13th, six points above the relegation zone, while Leicester – a place ahead – are without a win since New Year’s Day.
Puel’s side are now winless in seven and equalled an unwanted club record set at the turn of the century as they slipped to a fourth straight home Premier League defeat.
Leicester dominated for long spells and were unfortunate to go in behind at the break but while the scoreline flattered Palace, Puel is losing the faith of fans.
The returning Jamie Vardy was inches away from an early Leicester opener after nine minutes when he flicked Harvey Barnes’ cross just over.
James Maddison’s drive then deflected wide as the Foxes dominated with livewire Barnes the main threat, the England Under-21 international thriving after his loan at West Brom earlier this season.
Palace, outnumbered in midfield, offered nothing with James McArthur and Milivojevic picked apart by Maddison and Youri Tielemans.
Maddison shot straight at Vicente Guaita before Barnes wanted a penalty after tumbling under pressure from Martin Kelly.
Referee Anthony Taylor was right to wave away the protests before Leicester’s frustrations grew as they fell behind against the run of play.
Batshuayi had been anonymous until five minutes before the break when he fortuitously opened the scoring.
Zaha was tripped in the centre circle and Palace took the free-kick quickly, eventually finding McArthur.
He strode forward and his 25-yard effort struck the outstretched leg of Batshuayi to deflect past Kasper Schmeichel.
It was the 19th time in 27 top-flight games this season Leicester had fallen behind and Schmeichel was enraged with the award of the free-kick, remonstrating with the officials at half-time.
Demarai Gray replaced Rachid Ghezzal at the break but, as in the first half, Leicester continued to press without seriously testing Guaita.
But they kept going and finally forced the Eagles into a mistake to level after 63 minutes.
Palace played themselves into trouble, passing the ball out and then failing to deal with Christian Fuchs’ long throw.
It eventually came to Barnes and his miscued effort fell to Evans, on his 250th Premier League appearance, who swept in his first goal in over a year from six yards.
But if the Foxes expected the equaliser to pave the way to victory, they were mistaken and failed to build on their momentum to allow Palace to snatch the points.
First, with 20 minutes left, Zaha was left unmarked at the far post to crash in his sixth of the season from McArthur’s fine cross.
And 11 minutes later Palace wrapped up victory when Evans tripped Jeff Schlupp and Milivojevic sent Schmeichel the wrong way from the spot.
Zaha then added a fourth when he broke with Jordan Ayew and drilled in.