In a gritty game where Palace managed to keep City at bay for long periods, a rash challenge from Michael Olise was ultimately costly as it resulted in the game's only goal.
The result has seen the Premier League champions move to within two points of Arsenal who do not play until Sunday.
The hosts remain winless in 2023 and are now just four points above the relegation zone, as their lack of goals has brought them right back into the picture near the bottom.
With RB Leipzig coming up in the Champions League on Tuesday, Pep Guardiola made the decision to leave Kevin De Bruyne on the bench for the second time in four games.
Despite not having his creative influence on the field, Man City still mustered some good chances in the first 45 minutes, most notably for Haaland, who squandered a gilt-edged opportunity from close range after good work from Nathan Ake.
Earlier in the proceedings, Rodri had City's only shot on target of the half inside three minutes, shortly before Jack Grealish narrowly fired wide after a mazy run at the Palace backline.
Palace hardly laid a glove on City throughout the game, and the frustration in the stands was evident considering their two games before this evening saw them fail to register a shot on target too.
Their defensive work was largely good however, with CIty's first opportunity of the second half coming via a direct free kick from Phil Foden, who was denied well by Vicente Guaita.
That would be Foden's final involvement as he was taken off before the hour and replaced by Julian Alvarez, who himself missed the target after a wonderful turn in behind the Eagles' defense.
The major turning point of the match came with a quarter of an hour remaining, when City caught Palace out with a quick corner, forcing Olise to panic with a lunge on Ilkay Gundogan in the box, leaving Rob Jones with no option but to point to the spot.
Despite an excellent penalty record of his own, Gundogan left responsibilities to Haaland and the Premier League's top scorer sent Guaita the wrong way to notch his 28th league goal of the season.
Immediately after the goal, Palace looked far more expansive, with more possession and shots at goal, but they failed to register any on target - the first time a side has failed to have one in three successive games since the Premier League began compiling those statistics.
Unsurprisingly, Palace's profligacy in attack meant City were able to see out the win and they can now turn their attentions to the huge game in Europe against Leipzig on Tuesday.
Palace remain 12th despite losing, but other results today mean they are just four points from safety as the battle near the bottom tightens up even more.
Patrick Vieira's men are back in Premier League action again in midweek, as they face rivals Brighton & Hove Albion at the Amex.