Everton had started brightly and it was little surprise when Romelu Lukaku fired under Joe Hart to give his side the lead after just 16 minutes.
But just 90 seconds later City levelled through a lovely move which was finished off by Alvaro Negredo.
City then went ahead on the stroke of half-time when Sergio Aguero fired home brilliantly from the right edge of the six-yard box.
The second half was somewhat more comfortable for the home side and they sealed the win 20 minutes from time with an own goal as Aguero’s penalty cannoned back off the post and into the net off the unfortunate Tim Howard.
Defeats by Aston Villa and Bayern Munich had made this a very important game for City and under-pressure Joe Hart, and they responded in style.
The victory was only City’s third in 13 attempts against Everton, who tasted defeat for the first time in the league under Roberto Martinez.
Despite his refusal to confirm that Hart would start following his mistakes against Bayern, City boss Manuel Pellegrini showed faith in the England man while changing more than half his team.
Hart was straight into the action, diving on a ball from Steven Naismith with Lukaku lurking, but it was City who had the best of the early chances.
In the fifth minute, Howard pushed a shot from Yaya Toure behind, while two minutes later half the crowd thought the hosts had taken the lead when Aleksandar Kolarov’s free-kick flew into the side-netting.
But it was Everton who made the breakthrough in the 16th minute, and again there were questions over Hart.
A long ball from Phil Jagielka beat the City defence rather too easily and Lukaku broke into the area before placing a shot under Hart’s right hand.
The Toffees had no time to enjoy their lead, though, as from the restart City poured forward and Toure played in Negredo, who beat Howard.
There was no let-up in the pace of the game, and it was the hosts who were doing most of the pressing.
Milner’s deflected cross hit the outside of the near post while in the 26th minute Aguero missed a clear chance when he shot wide after being played in by the impressive Silva.
City were dealt a blow in the 35th minute when captain Vincent Kompany limped off to be replaced by Matija Nastasic.
The Serbian’s first act was a risky push in the back on Lukaku in the area but referee Jon Moss waved away muted penalty appeals.
It had not been Aguero’s day, the Argentinian unusually clumsy in the final third, but he showed the sort of clinical touch for which he is renowned to give City the lead in the 45th minute.
Silva was the architect, the Spaniard’s precise pass helping Aguero, who was just onside, beat former City man Sylvain Distin and tuck the ball into the far corner.
City were keen to add a third and pressed hard at the start of the second half without creating a real chance.
Everton hit their hosts on the break with a fine ball from Ross Barkley putting Kevin Mirallas through but the Belgian’s first touch was too heavy and Hart was able to pounce.
Kolarov, who had been having an influential game, was forced off in the 58th minute after suffering a cut to his forehead when he was nudged into a collision with Nastasic by Naismith.
City were in the wars, with Pablo Zabaleta also taking a bang that drew blood, but with cotton wool up his nose he returned to the pitch and promptly won a penalty.
Seamus Coleman leant into the full-back, who seemed to go down easily, and Everton were furious with the decision. Aguero stepped up and Howard tipped his shot onto a post but the ball hit the keeper and went in.
City continued to look the side more likely to score and Howard prevented Negredo from making it four with a smart stop before also denying substitute Samir Nasri in injury time.