Minutes earlier, Eddie Nketiah had spurned the best chance of the game so far when Oleksandr Zinchenko picked him out in the box with a cross but the striker headed wide.
Tomiyasu had a chance to make amends in the 28th after Gabriel Martinelli picked him out with a cross into the area but the Japan international volleyed the ball well high of the bar.
But Arsenal’s pressure paid off when it was awarded a penalty for a foul by Ederson on Nketiah as the striker tried to shoot from a difficult angle, and Saka calmly rolled it into the left corner after sending Ederson the wrong way.
City then thought it had a penalty early in the second half when Gabriel clumsily pulled down Haaland in the area, but the decision was overturned for an offside on the Norway striker.
But City still retook the lead after another mistake by Gabriel, who turned the ball over in his own half. The visitors countered quickly and Ilkay Gundogan squared the ball for Grealish, who beat Ramsdale with a low shot that took a deflection off Tomiyasu.
Haaland was fit to start after picking up a knock in the previous game against Aston Villa on Sunday and took his tally to 26 league goals this season when De Bruyne cut the ball for the striker, who took one touch before slotting a shot into the far corner.
Nketiah sent another header wide late on but that was the closest Arsenal came to pulling a goal back.
Arsenal has now gone three straight league games without a victory — losing two of those — after racking up 16 wins in the first 19 rounds of the season. The Gunners have dropped more points in those three games (8) than they did in the first 19 (7).
The game had originally been scheduled for October but was postponed because of a schedule reshuffling in the wake of the death of Queen Elizabeth II.
- AP