The prolific Norwegian, who recently returned to action from a leg injury, broke the deadlock after 70 minutes of a lackluster midday encounter at the Etihad Stadium to wrap up victory five minutes from time.
It was City’s 10th win in a row in all competitions and fired another warning to their title rivals that their momentum is growing.
City’s superior quality ensured the result and it was no surprise in the end, but it was still a bitter blow for relegation-threatened Everton after a dogged display.
Toffees manager Sean Dyche may not have been seen on the pitch due to a touchline ban, but his influence as Everton, without a league win since December, frustrated City was in no doubt.
The game got off to a slow start, not helped by a long delay at the start when City goalkeeper Ederson was treated after a collision with Ben Godfrey.
City controlled possession but struggled to find opportunities. They had little space to attack as Everton kept men behind the ball and with Kevin De Bruyne on the bench and Phil Foden out, they lacked a creative spark.
Some of their better moments came courtesy of Jeremy Doku on the left. The Belgian beat Godfrey twice 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 from a corner just before the break when Manuel Akanji and Haaland were both blocked in a crowded area.
Everton created little themselves, although Jack Harrison did fire one half chance.
After making a small change after the restart, City boss Pep Guardiola sent on De Bruyne and Kyle Walker in an attempt to add some energy.
Doku also remained a danger, finding Haaland in the penalty area, but Nor’s ball across the goal was turned behind him.
Rodri then shot well over, but despite growing anxiety in the City crowd, they kept their composure and continued to probe.
The breakthrough eventually came when Everton failed to deal effectively with the ball into the box for the first time.
The 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 poor goal, but reward for City’s persistence.
Everton were let out and caught out again when Haaland finally found space and was released by De Bruyne’s fine ball. The striker made no mistake, shrugging off Branthwaite and sliding into the bottom corner.
The job was done, although with 10 minutes to go there could have been a livelier finish had Beto’s tackle not been disallowed for offside.