City had won six straight games as they began their championship defense in dominant form, but a 1-0 setback against Newcastle in the Carabao Cup in midweek demonstrated Pep Guardiola’s side were not invincible.
City have now lost two in a row after starting the week without a competitive defeat in 90 minutes since May, due to a Ruben Dias own goal and a close-range Hee-Chan Hwang strike.
To momentarily equalize the scores, Julian Alvarez curled in a wonderful free-kick, but City were otherwise uninspired, with Erling Haaland having only 15 touches as Wolves defended excellently, prompting Gary O’Neil to describe the win as the biggest of his managerial career.
Rodri was once again noticeable by his absence as he served the second of his three-match ban – an alarming prospect considering that the crucial midfielder will also be barred from facing championship contenders Arsenal next Sunday.
Wolves knew a loss to City would put them in the relegation zone by the end of the weekend, and the first few minutes of the game appeared the champions would make the hosts their latest victims.
Only a brave Craig Dawson block denied Erling Haaland a clean goal at the far post six minutes into the game as City moved the ball about at ease as Wolves camped within their own half.
However, City’s defense broke at the first hint of pressure, with Neto sprinting into the visitors’ area before shooting in a low cross that rebounded off Dias and into the far corner, having troubled Nathan Ake with his pace throughout the game.
A recovery by City, who had won two of their previous three games after coming from behind, looked certain, but all they could muster before half-time were half-chances for Ake and Dias as the defenders attempted to exploit set-pieces.
Matheus Nunes was substituted at halftime after being booed by the home supporters following his unhappy departure from Molineux this summer, and Oscar Bobb, his replacement, had an immediate impact for City, winning the free-kick that was converted Alvarez.
City appeared to be gaining the momentum that might compel Wolves to capitulate, and Foden saw a shot cleared off the line by Dawson.
But Wolves were back in front only one minute later, exposing City down their left before Hwang scored on the second attempt.
City fought on, taking 23 shots but only creating 0.83 anticipated goals, with Dawson in particular key for keeping Haaland out of the game.
Pep Guardiola had had enough by the final whistle, with the City manager – who was in the grandstand serving a touchline ban – sprinting for the exit the minute referee Craig Pawson placed the whistle to his lips, as the home team was celebrating.