Four of the first five penalties were saved or missed before keeper Rui Patricio denied City’s Lukas Nmecha to give Wolves a 3-2 shootout victory.
The game was level at 0-0 following 90 minutes of an intriguing match in which City dominated possession.
City’s Raheem Sterling had also missed a penalty in the first half.
The England winger had two other decent chances to score – Kevin de Bruyne’s wonderful curling cross was inches away from being poked in at the back post by Sterling before the 24-year-old scuffed a shot in the box.
Midfielder De Bruyne was excellent in the first half before he was replaced by Ilkay Gundogan, playing exquisite passes to Leroy Sane and Sterling, creating numerous chances for his team-mates.
Manager Pep Guardiola said the team had “missed him a lot” last season, during which De Bruyne suffered two significant knee injuries.
“We did incredibly well without him but we are stronger with him,” said Guardiola. “Hopefully he can reach his level. He is very positive in his mind. He made an incredible first half, really good.”
Wolves keeper Patricio needed stitches after denying Sterling when threaded in by De Bruyne and there was a lengthy stoppage in play.
It threatened to ruin the rhythm of City’s intensity but then Sane outpaced Adama Traore and the Wolves winger brought him down in the box for a penalty.
Sterling took responsibility for the spot-kick but hoofed it way over the bar, much to his own frustration.
Pep Guardiola and Nuno Espirito Santo made plenty of changes after the break; City’s David Silva and Bernardo Silva, and Wolves’ Ruben Vinagre, were among the players to come on.
But it was Wolves youngster Dion Sanderson who had the first chance – he was fed in on the right of the box but his shot was blocked at the near post.
The FA Cup semi-finalists came close again when Ruben Neves’ half-volley from distance was saved by ClAudio Bravo, before City substitute Bernardo Silva had a shot deflected wide.
David Silva almost broke the deadlock late on when Conor Coady was booked for dragging back Bernardo after a poor touch and gave away a free-kick. The Spaniard’s curling effort was well saved by Patricio, who dived low to his left.
Then came the shootout – Coady, David Silva, Gundogan and Max Kilman’s spot-kicks all failed to hit the net after Ryan Bennett had given Wolves the advantage.
Danilo and Aleix Garcia converted their penalties for City before young Taylor Perry and Vinagre put Wolves 3-2 up. Nmecha had to score but hit it straight down the middle and Patricio made the save to confirm Wolves’ victory.