The former Manchester United man grabbed an early opener, before teeing up Conor Gallagher for a late second, as the 10-men of Manchester City fell to a first home Premier League defeat of the season.
Story of the Match
The Etihad has been somewhat of a happy hunting ground for Crystal Palace in recent seasons, having picked up four points from a possible nine on their last three trips to East Manchester. And it was the Londoners who took a shock lead inside the opening five minutes.
Manchester City's traditional high line was caught napping, with Conor Gallagher intercepting the ball on halfway before feeding through Wilfried Zaha. The former Manchester Untied man made no mistake with the finish, scuffing the ball past a helpless Ederson as the Citizens fell behind at home for the first time since their 2-1 defeat to Chelsea in May.
The hosts looked a shadow of the side that blew away Brighton seven days earlier, with Vicente Guaita a mere bystander throughout the opening half an hour, forcing Pep Guardiola to make a tactical change that would see Phil Foden moved out to the right-hand side, with Gabriel Jesus reverting back to a traditional centre forward role.
The fixture marked Guardiola's 200th in charge of Manchester City, but if the Spaniard was hoping for a celebratory affair then he was sadly mistaken, with things going from bad to worse on the stroke of half-time as Manchester City were reduced to 10 men.
Aymeric Laporte was the culprit, with the Spaniard shown a straight red card as he clumsily dragged Zaha to the ground. As the last line of defence, Andre Marriner was left with no choice but to send the centre back for an early bath.
Tensions boiled over on the half-time whistle, with Ederson shown a yellow card as he got involved in a heated spat between Gabriel Jesus and Wilfried Zaha. Guardiola wasted no time in rushing down the tunnel to deliver what was unlikely to be a pleasant team-talk.
Despite their man disadvantage, it was City who fashioned the first opening of the second half, as Rodri fired Grealish's cut back over from close range.
The Englishman looked to have made an instant impact, as his lofted through ball found the run of Foden, who in turn floated the ball to the back post for Jesus to bundle home. But the celebrations inside the Etihad were short lived, with the VAR lines ruling Foden to have been marginally offside in the build up.
The game opened up in the final quarter, with Jordan Ayew spurning a fantastic opportunity to double the visitors lead just moments later, blazing wide from 10 yards out. It would be his last contribution, with Christian Benteke on in his place.
With the clock ticking down, the hosts threw on Raheem Sterling and Riyad Mahrez in an attempt to spark some sort of comeback, but with City throwing bodies forward in search of an equaliser, it was Palace who would have the final say.
Zaha was again at the heart of the attack, twisting and turning in the Manchester City box before cutting the ball back to the onrushing Gallagher to fire home from 12 yards out, sparking scenes of jubilation in the away end.
Manchester City: Ederson, Walker, Dias (C), Laporte, Cancelo, Rodri, De Bruyne, Bernardo Silva, Grealish, Jesus, Foden.
Crystal Palace: Guaita, Ward, Guehi, Andersen, Mitchell, Kouyaté, McArthur (C), Gallagher, Ayew, Edouard, Zaha.