The Blues had taken the lead through Julian Alvarez, but Joao Cancelo was shown a straight red card not long after for a last-man challenge in the box.
The visitors then levelled from the penalty spot and though Haaland looked to have headed home the winner on 76 minutes, VAR ruled the effort out for offside.
But deep into added time, the peerless Kevin De Bruyne won a last-gasp penalty that Haaland squeezed home to send the Etihad into raptures.
Though there had been a couple of half-chances in the opening minutes, the first real test of Fulham keeper Bernd Leno came on nine minutes when De Bruyne, afforded way too much space by the visitors, fired a ferocious 20-yarder
that was turned away by Leno.
Fulham had offered little in attack, keeping a compact formation and trying to catch City on the counter.
But on 17 minutes, they were themselves caught on the counter as Ilkay Gundogan threaded a ball into the path of Alvarez who thumped a powerful, angled shot into the roof of the net and in off the underside of the bar
to put the Blues deservedly 1-0 up.
John Stones had the ball in the net eight minutes later, but that was just moments before the game turned on its head with a controversial decision by referee Darren England as he pointed to the spot for a challenge in the box by Joao Cancelo on Harry Wilson - and then sent the Portuguese off.
Cancelo argued it had been a shoulder-charge, but VAR were happy the decision was correct.
Andreas Pereira sent Ederson the wrong way, the scores were level and City were down to 10 men.
Jack Grealish's deflected attempt on half-time - and then a point-blank header by Manuel Akanji from close range that was instinctively beaten out by Leno - was the closest either side came to scoring before the opening period ended.
The second-half was fairly uneventful for the opening 15 minutes or so, with City controlling play and working hard to find a way through a disciplined Fulham formation.
The change in atmosphere and tempo shifted immediately and on 75 minutes, it looked as though it had the desired effect as De Bruyne's cross found Haaland who planted a header past Leno.
But it was to be Fulham's day with VAR decisions as the goal was ruled out for offside.
The Blues gave everything to try and find a winner, driven on by the tireless efforts of De Bruyne, Bernardo and Rodrigo in particular - and deep into added time, it was a piece of magic by the Belgian that resulted in a foul in the box and a penalty for City.
Haaland stepped up to squeeze the ball home and secure a dramatic victory and spark wild celebrations on the final whistle.
STAR MAN: KDB
Kevin De Bruyne was magnificent throughout, refusing to accept anything less than a victory with a performance that was befitting of one of the world's best attacking midfielders.
BIG WIN FOR CITY
If you judge the reaction of the players and manager on the full-time whistle, this felt like a very big win for City.
Cancelo is integral to so much City do and it clearly jolted the defending champions for a time, having to make adjustments all over the pitch.
It's in times of adversity that true champions reveal their mettle. and the Blues never stopped trying to find that elusive second goal - even having seen one ruled out by VAR - and our efforts were duly rewarded from the penalty spot.
The team's lap of honour and celebrations at the end show how much this victory meant - it could eventually prove to be a huge win when the points are totted up at the end of the campaign.
What it means...
City return to the top of the Premier League - for at least 24 hours.
Arsenal take on Chelsea tomorrow afternoon at Stamford Bridge.
City are at home again for the visit of Chelsea in the Carabao Cup.
The game will be played on Wednesday, 9 November and will kick-off at 20:00 (GMT).
Them our last fixture before the World Cup break is against Brentford, again at the Etihad Stadium, with a lunchtime kick-off of 12:30pm on Saturday 12 November.
"They missed Mitrovic a lot, but we conceded just one shot, we played at the right tempo.
"Kevin against Leicester and today, he put the team on his shoulders.
"Everyone was exceptional.
"We didn't win the Premier League today, but this moment makes sense for our job.
"The faces in the crowds, the run around the pitch at the end - it was very good."
FULHAM: Leno, Tete, Ream, Diop, Robinson, Reed, Pereira (Harris 88), Palhinha, Wilson (James 76), Willian (Mbabu 80), Vinicius (Cairney 76)
Subs: Rodak, Kurzawa, Adarabioyo, Duffy, Onomah
Stats, facts and milestones
City are unbeaten in their last 15 Premier League games against Fulham, winning 12 and drawing three. The Blues have won each of their nine against the Cottagers in the competition, keeping a clean sheet in six of the last five.
We have won our last 13 meetings with Fulham in all competitions, only ever having longer winning runs against Watford (15) and West Bromwich Albion (14). City also netted at least twice in each of their last 14 games against the Cottagers in all competitions.
City have now won our last 11 home Premier League games and have a 100% home record this campaign.
Pep Guardiola's record against Marco Silva is now 11 wins, no draws and no defeats.
94:33 - At 94 minutes and 33 seconds, Erling Haaland's penalty is Manchester City's latest winning goal in the Premier League since November 2017 against Southampton, when Raheem Sterling scored on 95:04. Rescued. pic.twitter.com/EDeGqVrpp0— OptaJoe (@OptaJoe) November 5, 2022
News about Man City v Fulham"
Guardiola: We showed the right attitude
Pep Guardiola said his players showed the right mixture of ‘grumpiness’ and ‘energy’ to battle back from a sending off and beat Fulham 2-1. Watch more
Guardiola: Kevin will have slept like a baby
Pep Guardiola says Kevin De Bruyne will have ‘slept like a baby’ after his all-action performance in this weekend’s 2-1 win over Fulham. Read more
Training: Gym workout after Fulham win
It may have been an exhausting 2-1 win over Fulham but several members of the first team were back at it today. View more
City 2-1 Fulham: Stats of the match
Pep Guardiola was an incredibly proud manager on the final whistle after watching his team beat Fulham 2-1. Read more
City 2-1 Fulham: Short highlights
Bite-sized highlights of our dramatic win over Fulham.... Watch more
City 2-1 Fulham: Pitcam highlights
Relive the drama of our nail-biting victory over Fulham at the Etihad Stadium from a unique angle. Watch more
Guardiola: 'I am so proud'
Pep Guardiola revealed how his team had to adjust after the sending off of Joao Cancelo and still be an attacking threat – plus how proud he was of his players. Watch more
Tunnel Cam: Fighting back against Fulham
Get a glimpse down the Etihad Stadium tunnel from our nerve-racking Premier League victory over Fulham on Saturday. Watch more
City v Fulham: Full-match replay
Relive every kick of a dramatic Premier League clash at the Etihad on CITY+... Watch more
Moments like these make sense of our job, says Guardiola
Pep Guardiola spoke of his enormous pride after 10-man City’s dramatic 2-1 win against Fulham, saying the way we secured a precious three points thanks to substitute Erling Haaland’s 95th minute penalty was a moment ‘that makes sense for our job.’ Read more
City 2-1 Fulham: Extended highlights
The best of the action from our 2-1 win over Fulham... Watch more