Dortmund, who lost to Manchester City in the Champions League in midweek, fell behind to a Milot Rashica strike.
Giovanni Reyna levelled with a powerful finish before Haaland converted a 34th minute penalty.
Haaland tapped in soon after before Mats Hummels headed in a late fourth.
Haaland’s double ended a seven-game goal drought and took his league tally to 23 goals this season.
The win means fifth-placed Dortmund moved to within four points of Eintracht Frankfurt, who are in fourth, with five games left. The top four teams qualify for next season’s Champions League.