Dortmund coach Edin Terzić made two changes from the team that lost 2-1 to City on Wednesday, bringing in Gio Reyna and Julian Brandt for Emre Can and Ansgar Knauff, who dropped to the bench.
Counterpart Florian Kohfeldt made a host of changes to the team that lost 4-1 at home to Leipzig last weekend.
One of them, Milot Rashica, opened the scoring in the 14th minute, when Maximilian Eggestein played him through with a brilliant pass from midfield. Mats Hummels was unable to stop the speeding Rashica, who fired low inside the far post.
But Reyna equalized with a thunderous shot inside the top right corner from just outside the penalty area in the 29th, shortly before Bremen’s Kevin Möhwald conceded a penalty for a foul on Reus.
Haaland duly scored from the spot in the 34th. It was his first goal in April.
Haaland will hardly get an easier finish for his second goal four minutes later, when Bremen’s defense failed to deal with Reyna’s cross and left the tall forward completely free at the far post to tap in.
The Norwegian might have had a hat trick but Bremen goalkeeper Jiri Pavlenka got his fingertips to his shot early in the second half, and he had a late goal ruled out for offside.
Theodor Gebre Selassie was unable to stop Hummels’ header from a corner crossing the line in the 87th.