The prolific Norwegian, who recently returned to action after a foot injury, broke the deadlock after 70 minutes of a drab lunchtime encounter at the Etihad Stadium and wrapped up victory five minutes from time.
It was City's 10th successive win in all competitions and fired out another warning to their title rivals that their momentum is growing.
City's superior quality warranted the result, and ultimately it was not a surprise, but it was nevertheless a bitter blow for relegation-threatened Everton after a dogged display.
Toffees manager Sean Dyche may not have been seen pitchside due to a touchline ban but there was no mistaking his influence as Everton, without a league win since December, frustrated City.
City controlled possession but found opportunities hard to come by. They had little space in which to attack as Everton kept men behind the ball and, with Kevin De Bruyne on the bench and Phil Foden wide, they lacked a creative spark.
Some of their brighter moments came courtesy of Jeremy Doku on the left. The Belgian twice beat Godfrey but one ball across the box was cleared by Jarrad Branthwaite and another cross was too high for Haaland.
Their best chances of the first half came following a corner just before the break as Manuel Akanji and Haaland both had efforts blocked in a crowded box.
Everton created little themselves although Jack Harrison blazed one half-chance well over.
After little change following the restart, City boss Pep Guardiola sent on De Bruyne and Kyle Walker in an attempt to inject some energy.
Doku also remained a danger and he found Haaland in the box but the Norwegian's ball across goal was turned behind.
Rodri then shot well over but, despite increasing anxiety in the crowd, City maintained their composure and kept probing.
The breakthrough finally came as Everton, for the first time, failed to effectively deal with a ball into the box.
A header was blocked and the ball found its way to Haaland, who met it with a fierce right-footed strike that flew past Jordan Pickford. It was a scrappy goal but reward for City's persistence.
Everton were deflated and they were caught out again as Haaland finally found some space and was released by a fine De Bruyne through ball. The striker made no mistake as he shrugged off Branthwaite and slotted into the bottom corner.
The job was done although, with 10 minutes of stoppage time, there might have been a livelier finish had a Beto strike not been disallowed for offside.