City were in cruise control midway through the first half at wet and windy Stamford Bridge, looking every inch champions-elect as they tormented their opponents.
Mario Balotelli scored inside two minutes and they should have been 2-0 up – seeing a decent penalty appeal turned down in the process – before simply losing their way.
That allowed Raul Meireles to equalise on 34 minutes after which City simply lost the plot, Gael Clichy picking up two yellow cards in 11 minutes and Joleon Lescott handling in his own box to gift Chelsea their winner with eight minutes left on the clock.
Frank Lampard was the scorer, coming off the bench to smash home a penalty which ended new manager Andre Villas-Boas’ run of defeats against other big teams and propelling his side to third place, seven points behind their opponents.
Victory capped a week to remember for Chelsea – who beat Valencia on Tuesday to seal their place in the Champions League last 16 – while defeat sealed a week to forget for City, who crashed out of the same competition on Wednesday.
They remain favourites to win their first title for 44 years but will have to cut out the indiscipline which has seen them pick up three red cards in their last six Premier League games.
There was no recall for Lampard for what was another potential do-or-die night for Chelsea and Balotelli must have been fearing the same fate after breaking a pre-match curfew.
But the Italian’s latest antics failed to deter Roberto Mancini from picking a man who had scored on his previous four Premier League starts this season and took just two minutes to do so again.
The goal owed everything to the brilliance of Sergio Aguero and a slip from Branislav Ivanovic.
Aguero received the ball on the right with his back to goal, carried it inside from the right and played in Balotelli, who shrugged off the wrong-footed Ivanovic, rounded Petr Cech and nonchalantly stroked the ball home.
City were tearing into Chelsea, forcing errors in their opponents’ half, and although the hosts looked to have got a grip when Meireles’ drive was deflected over in the 10th minute, they should immediately have been 2-0 down.
Ashley Cole gave the ball away, allowing Aguero to race goalward and leave the recalled Jose Bosingwa in a heap before drilling wide.
Bosingwa got away with dangling his leg in the box, prompting David Silva to go down, with referee Mark Clattenburg waving away the appeals.
Clattenburg also failed to spot an altercation between Yaya Toure and Juan Mata which might have seen either player carded, before Didier Drogba forced the first save of note from Joe Hart in the 25th minute.
City’s workrate had dipped and they paid the price when former academy graduate Daniel Sturridge brilliantly laid on Chelsea’s equaliser.
The ball was sprayed to the forward out on the right and he tricked his way past Clichy and crossed for the arriving Meireles to crash into the net on the volley.
No-one ran to the bench to celebrate, putting paid to suggestions Chelsea’s players had been asked to.
Clattenburg’s yellow card was soon out, with Meireles and Vincent Kompany both booked before half-time and Clichy just after for hauling back Sturridge.
The left-back then tripped the onrushing Ramires two minutes before the hour mark to earn a deserved second booking and leave City down to 10 men.
Chelsea poured forward but Oriol Romeu – who had become increasingly influential – was carded for felling Balotelli before Kolo Toure was sent on for Aguero.
Chelsea introduced Lampard for Meireles in the 73rd minute shortly before Ramires became the latest player to see yellow for an ugly tackle on Balotelli.
Silva was then replaced by Nigel de Jong and Drogba was booked for going through the back of Pablo Zabaleta.
Chelsea eventually made the breakthrough seven minutes from time, after Lescott handballed. Lampard smashed the penalty straight down the middle and sent Stamford Bridge into ecstasy.
Florent Malouda replaced Mata, Edin Dzeko came on for Lescott and Sturridge was withdrawn for John Obi Mikel – but the game was already up for City.