forced to put their Premier League title party on hold on Saturday, winning to boost their own chances of a top-four finish in a dress rehearsal for the Champions League final.
Raheem Sterling gave the home side the lead just before half-time at an empty Etihad Stadium but Hakim Ziyech levelled and Marcos Alonso bundled in the winner in the dying seconds.
City could be crowned champions before they play again. Second-placed Manchester United face three matches before Guardiola’s men are next in action, against Newcastle on Friday.
The point lifts Chelsea into third spot, six clear of fifth-placed West Ham with just three games to go.
Thomas Tuchel’s in-form team ended City’s dreams of a historic quadruple by beating them in the FA Cup semi-final last month and they once more proved tricky opponents.
City, who have a huge 13-point advantage over second-placed Manchester United, are certain to win their third Premier League title in four years but must now wait for it to be confirmed.
Pep Guardiola made nine changes from the side that saw off Paris Saint-Germain in the second leg of the Champions League semi-final in midweek, with Ederson and Ruben Dias the only players to keep their places.
Chelsea made five changes following their triumph over Real Madrid.
The home side dominated possession in the early stages, with Ferran Torres firing over after a thrust down the right and Benjamin Mendy shooting wide.
Raheem Sterling was booked in the 12th minute after catching Timo Werner with his studs but the punishment could have been worse.
Werner had the ball in the net just after the half-hour but he was well offside and Sterling had a shot at the other end but clear-cut chances were at a premium.
Ziyech tested Ederson in the City goal as the half-time break neared but moments later the home side were ahead.
Gabriel Jesus shrugged off Andreas Christensen to break into the area. He squared, looking for Sergio Aguero. The Argentine’s touch was poor but Sterling was on hand to tuck home.
City should have been 2-0 in first-half stoppage time but Aguero paid the price for attempting a Panenka penalty that was easily saved by Edouard Mendy, drawing the ire of Guardiola.
Jesus won the spot-kick when he was bundled over by Billy Gilmour.
As the second half wore on the visitors started to establish a foothold and they equalised just after the hour when Rodri lost possession on the halfway line.
Chelsea broke down the right and Cesar Azpilicueta picked out Ziyech just outside the area. The Moroccan drilled a low shot into the bottom corner.
Guardiola threw on Ilkay Gundogan and Phil Foden for Torres and Aguero as his side went in search of the win.
Chelsea substitute Callum Hudson-Odoi had the ball in the net with about 10 minutes to go but the goal was ruled out for a marginal offside.
The finish was frantic. Sterling had a penalty appeal turned down and Alonso then grabbed a last-gasp winner after an assist from Werner.
Tuchel has transformed Chelsea’s fortunes since replacing Frank Lampard at Stamford Bridge in January, losing just two matches on his way to the FA Cup final and Champions League final.