The opening few minutes of proceedings went as expected, with Manchester City retaining a lot of the ball in the middle of the park as they looked to unlock a resolute Palace defensive line.
It was this resoluteness that meant it was the Eagles who in fact registered the first chance of the afternoon, with Luka Milivojević sending over from just outside the box after a quick breakaway down the pitch from Roy Hodgson’s side.
As the Citizens continued to probe down the flanks, Patrick van Aanholt and Jeffrey Schlupp took it in turns to keep Raheem Sterling quiet down the Eagles’ left-hand flank.
The first big chance of the afternoon for Man City came in the 9th minute, retrieving a stray ball from Christian Benteke, City worked their way through Palace’s box thanks to some fine individual play from David Silva, who teed up Sterling, unmarked, at the back post. Thankfully, the England international fluffed his lines and the ball trickled wide of Vicente Guaita’s post.
Sterling made up for his open goal miss on the 15-minute mark, though, with City thwarting a Palace attack, breaking quickly, culminating in a defence-splitting pass from Kevin De Bruyne to Sterling, who arrowed a shot into the roof of Guaita’s net.
Things went from bad to worse for Palace when Jeffrey Schlupp was forced off in the 19th minute through injury, with Hodgson bringing on Cheikhou Kouyaté for the Ghanaian international.
A few promising Palace breaks down both flanks showcased that the Eagles weren't giving up. However, the next chance of the game fell to Guardiola's side, with Agüero firing over from just inside the box.
Palace came alive with the neat, intricate build-up play you’d expect to see from the Eagles: starting with Zaha cutting in from the left-hand side, he found Aaron Wan-Bissaka, who knocked the ball inside to James McArthur, who in turn found Milivojević, with the Serbian sending a delightful dink over the City back line to Benteke; the resulting knockdown from the striker couldn’t quite find Zaha as City scrambled to clear.
Moments later, down the other end of the pitch, Guaita saved smartly from Sané at his right-hand post, parrying away a close-range effort from the German international.
The second-half carried on in a similar vein to the first, with De Bruyne, after a sustained period of possession for the Citizens, whipping a ball across the Palace box that, after a few bobbles, was smothered by Guaita.
Nothing of real note happened in the opening 15 minutes of the second-half, with the ball getting bogged down in the midfield, however, the next big moment of the game was a costly one for the Eagles, with Sterling slotting home a miscued shot from Sané in the 63rd minute.
The second goal from the Citizens sparked a resurgence for Hodgson's side with a sustained period camped inside Man City's half. Benteke acrobatically shot down the centre of City's goal, with Ederson able to hold on to the effort, and that was followed up a couple of minutes later with Scott Dann heading over from a corner.
A tactical change from Hodgson in the 77th minute saw Andros Townsend replaced by Max Meyer as the Eagles looked to interrupt Man City's rhythm and stage a late comeback.
An almost instant repsonse from the personnel and formation change, with James McArthur drawing a foul on the edge of the box.
Up stepped Milivojević and as the Serbian has done from dead ball situations all season, rifled home the free-kick to lift the Selhurst faithful as Palace went in search of the equaliser in the final 10 minutes.
Bakary Sako was the final throw of the dice from Hodgson, with the attacker replacing the more defensive-minded McArthur, as Palace looked to make it three games in a row unbeaten against the reigning champions.
Despite the late surge it wasn't meant to be for the Eagles, with Kevin De Bruyne notching his second assist of the afternoon, teeing up Gabriel Jesus to slot home from close range in the 90th minute to end any chance of the Eagles earning a point.
Palace: Guaita, Van Aanholt, Dann, Kelly, Wan-Bissaka, Milivojević, McArthur (Sako 84), Schlupp (Kouyaté 19), Zaha, Townsend (Meyer 77), Benteke
Subs not used: Hennessey, Ward, Ayew, Batshuayi
Man City: Ederson, Walker, Kompany, Laporte, Mendy, Gundogan, De Bruyne, D Silva (B Silva 63), Sané (Stones 85), Sterling, Agüero (Jesus 74)
Subs not used: Muric, Danilo, Mahrez, Otamendi