A lively first half saw City dominate possession as Chelsea looked to break out on the counter, which suited the visitors given their struggles when faced with the home team’s pressing game.
Jack Grealish threatened early on but City were missing the presence of Erling Haaland, who started on the bench, to gobble up their inviting crosses into the box.
Kalidou Koulibaly was lucky to only receive a yellow card after tripping Grealish as the last man outside the box, just after Rico Lewis got a vital toe to deny Christian Pulisic a 13th-minute opener.
Stefan Ortega was on hand to prevent Pulisic shortly afterwards, this time expertly parrying a hit from outside the box on another Chelsea counter.
The hosts continued to hold the majority of the ball and probe the Blues’ backline but it was 18-year-old midfielder Lewis Hall who had the chance of the half, jinking around a tackle on the break only to roll a tame shot straight at Ortega.
City took the game away from Chelsea with a five-minute burst in the second half.
On 57 minutes, Trevoh Chalobah was punished for chopping Riyad Mahrez in the D by a yellow card and the Algerian firing over the wall - in which Koulibaly failed to jump - to net the opener.
Within five minutes, it was 2-0. This time Chelsea were caught on the break as Julian Alvarez picked out Mahrez, whose shot was parried straight into the Argentine’s path for a tap-in.
Hakim Ziyech nearly dragged Chelsea back into it with a delightful piece of skill to tee up Hall yet he was denied again by a superb Ortega diving stop.
After three domestic defeats in a row, Graham Potter now takes his team to in-form Newcastle before the World Cup break while City host Brentford and await their fate in tomorrow’s fourth-round draw.