The home side took the lead early in the first half when the luckless Ruben Dias deflected the ball into his own net after a lightning break from Pedro Neto.
City dominated much of the possession and Julian Alvarez equalised with a stunning free-kick just before the hour mark, but we were level for just eight minutes.
Another fast counter-attack saw the ball eventually land at the feet of Hwang Hee-chan who smashed in the winner with a rearguard action seeing Wolves hold on for the three points.
From the very first whistle, Molineux echoed to the sound of boos for former player Matheus Nunes as he returned to his former club less than a month after completing his switch to City.
And he almost caused them more pain inside five minutes when he intelligently darted onto Dias’ lofted pass and tried to square a pass to Haaland, but Craig Dawson just squeezed the ball away as the striker was about to pounce.
The pattern of the first half was set early with City dominating possession and trying to cut through the heavily-manned home defence while Wolves’ wingers Neto and Hwang often ran the ball away from danger when they had the opportunity.
And it worked perfectly for the home side as they went in ahead at half-time despite only having a single effort - and that was off-target.
Wolves’ backline was largely camped on the edge of their own box but they seized on a loose ball to take a 13th minute lead.
A square pass from Mateo Kovacic clipped Phil Foden‘s heels into the path of Neto and the Portuguese winger sprinted to the other end of the pitch where his low cross deflected off Dias and over Ederson.
Wolves’ keeper Jose Sa had to be alert to keep out Nathan Ake’s effort from a tight angle and a header from Dias just before half-time but City were finding it difficult to create chances.
The home side’s biggest alert before the break came when Hwang, already booked for a high challenge on Manuel Akanji, then caught Kyle Walker late. But he escaped a second yellow and was to have a big impact later in the game.
Guardiola, banned from the touchline, made a change at the break with Oscar Bobb replacing Nunes and he soon created a half-chance for fellow Norwegian Erling Haaland but it was half-blocked before being collected by Sa.
Bobb was then caught on the edge of the box by a clumsy challenge by Joao Gomes in the 56th minute leading to the equaliser.
Alvarez and Foden stood over the ball and it was the right foot of the Argentinian that curled a powerful strike inside the near top corner with Sa unable to keep it out.
But we were undone by a sucker punch when Nelson Semedo raced clear down the right hand side and the ball eventually ran to Hwang who smashed Wolves back ahead.
City were again left chasing the game and this time the home side stood firm with their dogged performance underlined by centre-back Dawson who wouldn’t give Haaland a moment’s peace to ensure had few sights of the goal.
WOLVES: Sa, Semedo, Dawson, Kilman, Ait Nouri (Doherty 74), Gomes (Traore 67), Lemina, Neto, Toti, Hwang (Silva 86), Cunha (Jonny 86).
Subs: Bentley, Bueno, Kaladzic, Sarabia, Hodge.
Subs: Ortega Moreno, Carson, Gomez, Gvardiol, Lewis.
With Kevin De Bruyne facing a lengthy lay-off through injury, Alvarez has stepped up as City’s danger man from free-kicks.
His equaliser against Wolves was perfectly placed in the ‘postage stamp’ as keeper Sa clattered into the woodwork in an attempt to keep it out.
The Argentinian scored with a free-kick against Red Star Belgrade, although keeper Omri Glazer’s involvement wasn’t overly impressive and thundered a brilliant strike against the post at West Ham.
But he’s also alert to clever opportunities, switching the play with short free-kicks to upset opponents’ defensive set-ups.
WHAT IT MEANS
City missed the chance to set a Club record seven successive wins to start a top-flight season.
But we remain top of the Premier League although the top-six are separated by just three points.
“Congratulations Wolves, they deserved it. We had chances and struggled to deal with transitions and they played very well.
“We were there and settled well and the question is when the opponent is faster and quicker, we have to accept it.”
“We’re all a bit disappointed now of course. We should have done more I guess.
“We pushed for [the win] and unfortunately didn’t get it.
“Leipzig next, a big game ahead and then Arsenal. Only thinking forward.
“It’s not the greatest feeling now losing. I just want to keep pushing for more.”
We’re back in Champions League action with a trip to German side RB Leipzig on Wednesday night at 20:00 (UK).
Both sides won their opening Group G games by a 3-1 scoreline – City beating Red Star Belgrade at home and Leipzig winning at Young Boys.
We then travel to Arsenal next Sunday to face last season’s runners-up at the Emirates at 16:30 (UK) in our final game before an international break.
News about Wolves v Man City
Wolves v City: Full match replay
Watch the full 90 minutes of our Premier League encounter at Molineux… Watch more
Wolves were better in transitions, says Pep
Pep Guardiola said Wolves were better than City in transitions as they inflicted our first defeat in the Premier League this season. Read more
Wolves 2-1 City: Brief highlights
Action from City's clash at Molineux... Watch more
Wolves 2-1 City: Pitcam Highlights
Watch City's Premier League clash at Molineux from a unique perspective. Watch more
Guardiola makes seven City changes for trip to Wolves
Pep Guardiola has made seven changes as we return to Premier League action at Wolves today aiming to extend our winning start to seven matches. Read more
Guardiola: Six out of seven is good
Pep Guardiola refused to be downbeat after watching his side lose 2-1 to Wolves. Watch more
Guardiola: I can’t wait to be back on the bench
Pep Guardiola says he’s looking forward to being back on the bench after sitting out the weekend Wolves defeat. Read more
Wolves 2-1 City: Extended highlights
Extended action from Molineux... Watch more