Haaland came off the bench at 2-0 down at the start of the second half and went on to score his eighth goal in four games for Dortmund since signing in January. However, Werder soon restored its two-goal lead when Milot Rashica scored.
Dortmund's 17-year-old American Gio Reyna scored his first goal for the club in the 78th minute, and did it in style, beating two defenders before curling a shot from outside the penalty area into the top corner.
Dortmund could have sent the game to extra time, but Jadon Sancho and Marco Reus missed clear-cut chances to score, before Haaland had a header saved in stoppage time. Earlier, Filip Kostic scored twice as 2018 cup winner Eintracht Frankfurt beat Leipzig 2-1 to claim a place in the German Cup quarterfinals. It was Frankfurt's second win over Leipzig in 11 days.
Leipzig started with top scorer Timo Werner on the bench, and Frankfurt took the lead in the 17th minute when Andre Silva converted a penalty after Marcel Halstenberg handled the ball. Kostic made it 2-0 for Frankfurt early in the second half after a poor pass in defense by Leipzig.
New signing Dani Olmo scored his first goal for Leipzig in the 68th, but the visitors couldn't draw level even after bringing Werner on as a substitute. Kostic added another goal deep in stoppage time on the counterattack.
Leipzig has failed to win its last three games and lost first place in the Bundesliga to Bayern Munich on Saturday. The catalyst for the run of poor form was a 2-0 loss to Frankfurt on Jan. 25. Also Wednesday, Schalke came back from 2-0 down to beat Hertha Berlin 3-2 after extra time. Fortuna Düsseldorf ended a six-game winless run by beating second-tier Kaiserslautern 5-2.
More AP soccer: https://apnews.com/Soccer and https://twitter.com/AP_Sports