Eden Hazard scored two goals either side of Sergio Aguero’s strike, and the Londoners held on for victory.
City, for whom skipper Vincent Kompany played 90 minutes at centre-back, remain in fourth position ahead of the weekend clash with Hull.
What happened
City controlled large parts of the game, playing with spark and invention throughout, but again ended the contest frustrated.
There were echoes of the first game between these sides at the Etihad Stadium, where City bossed the play only for Chelsea to pick up the points.
The three goals, which came in the first 35 minutes, were scrappy considering the fine play that came in between them.
But once Chelsea restored their advantage at 2-1 they defended stoutly and in numbers. City, who drew 2-2 at Arsenal on Sunday in the first part of the London double-header, must reset quickly as the race for the top four places hots up.
Chelsea were first to strike in a move that was against the run of play.
Cesar Azpilicueta broke down the right and pulled the ball back for Hazard. His first time shot took a slight deflection off Kompany’s head, and the ball flicked off Willy Caballero’s hand and just inside the post.
City quickly regained the initiative, with David Silva cleverly finding space between the Chelsea lines, and often being well picked out by Fernandinho.
But it was a gift from Chelsea keeper Thibault Courtois that set City level when Belgian keeper misplaced a pass to the feet of Silva. The Spaniard drove forward and shot, with Courtois’ parried save falling at the feet of Aguero – he made no mistake for his 27th of the season.
City almost went ahead but for a fine Courtois save at the feet of Sane, before Chelsea hit back.
A shrewd pass into the box from Fabregas found Pedro, Fernandinho clipped his legs, and referee Mike Dean pointed to the spot.
Caballero saved Hazard’s penalty only for the Belgian to follow up and score in a galling blow for the Blues.
Again City dug deep and forced an organised Chelsea outfit onto the back foot.
Kompany hit the bar with a looping header just after the break, while Fernandinho volleyed over from close-range with the offside flag down.
Next to threaten was John Stones but his header was collected by Courtois.
Chelsea were looking to hit on the break and they did so after 75 minutes, City grateful that Hazard’s shot flew over.
City came agonisingly close to an equaliser in the final minutes but Stones’ close-range volley skewed over the bar.
Matchday App man of the match – Sergio Aguero
The Argentinian striker was on the spot to score his 27th goal of the season to cap a hard-working display.
Team notes
Vincent Kompany returned to the team for the first time since 28 January in impressive fashion, as did Fabian Delph, who made his first appearance for a month. City started with a 4-2-3-1 formation, with Navas at right back, and Fernandinho and Delph the two holding midfielders.
What it means?
City remain in fourth place in the Premier League, two points behind Liverpool but with a game in hand. City are four points ahead of fifth-placed Arsenal, but have played a game more than the Gunners.
What’s next?
City return to the Etihad Stadium on Saturday for the 3pm kick-off against Hull.