For United, their third straight loss without finding the back of the net was their seventh defeat in their last nine games. And it leaves them three points and two places outside the top four.
United boss Ole Gunnar Solskjaer made five changes from the team that lost 4-0 at Everton on Sunday, and his side played like they had a point to prove as they set a high tempo from the off.
Paul Pogba’s floated pass over the top was volleyed wide by Jesse Lingard at full stretch, before a rapid counter-attack was only snuffed out when City goalkeeper Ederson won a foot race with the advancing Marcus Rashford.
Rashford summed up United’s spirited yet hectic first-half showing when he collected the ball in midfield, turned and hit an ambitious effort from 40 yards that flew over the bar.
Just before half-time, City produced their most fluid attacking move. David Silva and Sergio Aguero combined for Raheem Sterling to skip past three defenders across the box, but the England forward was unable to beat David De Gea from eight yards out.
Lingard was perhaps fortunate to avoid a booking in first-half stoppage time when he caught Ilkay Gundogan on the ankle after winning the ball in a diving tackle. However, it was Fernandinho who was City’s first substitute, who limped off and made way for Sane just five minutes after half-time.
City took the lead soon when Gundogan fed Bernardo Silva out on the right. The Portugal midfielder ran at the isolated Luke Shaw and drilled a low strike inside De Gea’s near post for his 13th goal of the season.
Moments later there could have been goals for either side. Aguero clipped the outside of the post at one end before Lingard swung and missed at Rashford’s chip across the City area at the other.
Pogba had the opportunity to force a first save from Ederson, but the France midfielder fired a free kick in a good position straight into the wall and had his follow-up shot blocked too.
United were losing their first-half tempo, and Sane put them 2-0 down on 66 minutes when his low strike from the inside left position hit the back of the net despite heavy contact from the boot of De Gea.
Solskjaer brought Romelu Lukaku off the bench and the Belgium striker soon forced a save from Ederson from a tight angle, but City were not to be denied a second clean sheet in four days.
It was another morale-crushing blow for United, whose dwindling hopes of Champions League qualification face another stern test when top-four rivals Chelsea come to Old Trafford on Sunday. Meanwhile, City now know that wins against Burnley, Leicester and Brighton in their remaining games will guarantee they retain their league title.