Pep Guardiola's side were on course for a routine win thanks to efforts from Jack Grealish and Rico Lewis, but as the hosts failed to put away a surfeit of chances to add to their advantage, Roy Hodgson's galvanised troops made them pay through Jean-Philippe Mateta and a last-gasp Michael Olise penalty, as a profligate City dropped points for the fifth time in six top-flight matches.
Once again making do without the services of the stricken Erling Haaland, Guardiola continued to persist with Julian Alvarez as the focal point of his attack, while Dean Henderson made his debut in the Palace goal amid Sam Johnstone's absence.
The ex-Manchester United man was offered protection by a defence-heavy Palace setup, although he was called into action with just four minutes on the board, tipping Alvarez's header behind after Kyle Walker was afforded ample space and time to deliver the cross.
The pattern for the first half was established then and there, as Ruben Dias and Rodri also came close inside the opening 20 minutes, and Palace's resistance was inevitably broken with just over a quarter of the game gone.
Hodgson's side had every man behind the ball as Dias strolled into the final third, but the Portuguese defender still picked out a crisp pass to Foden, who took the ball on the turn on the edge of the D and fed Grealish to nonchalantly roll the ball into the far corner.
Following a nail-biting VAR check for offside, Grealish's goal was given the green light, and Palace's afternoon went from bad to worse when Joel Ward - who abandoned his position to ineffectively press Foden and leave space in behind for Grealish - came off injured in the 33rd minute.
Eighteen-year-old David Ozoh was introduced into the fray in Ward's place, and despite spending most of the opening 45 camped inside their own half, Palace handed their hosts a brief scare in the 44th minute, as Olise sent a well-struck free kick just over the bar.
Normal service resumed after the half-time break, and City had an Alvarez free kick disallowed in the 52nd minute as an offside Rodri was interfering with play, but there was no denying the champions their second just one moment later.
Another Grealish-Foden combination ended with the latter dinking a delivery into the box for the arriving Rodri, who was surrounded by a sea of Palace shirts and could not get the ball under his control, but he managed to lay off Lewis for a simple low drive from eight yards out.
Guardiola's men were not content to declare at two, although Henderson comfortably held onto a Josko Gvardiol header in the 58th minute before thwarting Bernardo Silva with a stunning full-stretch save five moments later, and Hodgson's side then unearthed a slice of hope out of nowhere in the 76th minute.
One long ball over the top from Marc Guehi did the damage, as the centre-back picked out the run of Jeffrey Schlupp, who shrugged off the attention of Dias, burst into the penalty area and squared for Mateta to tap in his second goal in as many matches from a yard out.
Faced with increasing pressure as the clock ticked down, Man City sought to slow the game to a crawl, but deep into second-half injury time, Foden attempted to hack the ball clear inside his own box but wiped out Mateta as the Palace attacker stole in.
Referee Paul Tierney had no choice but to point to the spot, and after a slight hesitation, Olise coolly side-footed his penalty into the bottom corner in front of an ecstatic away end.
Neither side had enough time to push on for a late winner as the fourth-placed Citizens squandered the chance to rise to second in the table, while Palace remain in 15th spot with 17 points on the board.
The Citizens now take a break from domestic action to face Urawa Red Diamonds in Tuesday's Club World Cup semi-final - which will precede a third-placed playoff or showpiece match against either Fluminense or Al Ahly on December 22 - while Palace host historic rivals Brighton & Hove Albion on Thursday evening.