Haaland pounced on a Hoffenheim mistake to race through and score after the visitors had come from a goal down to lead 2-1.
Hoffenheim’s Ilhas Bebou twice failed in a one-on-one with Dortmund keeper Marwin Hitz before Jadon Sancho put the hosts in front in the 24th minute.
Dortmund’s sloppy defending then allowed Munas Dabbur to slip into the box and finish a Sebastian Rudy pass for the equaliser seven minutes later.
Bebou then made amends for his earlier misses, heading in a ball that bounced of Hitz’s hands as the keeper attempted to clear a cross in the 51st with Dortmund having to wait until Haaland’s equaliser to rescue a point.
With only one win in their last six games, Dortmund remain in sixth place on 33 points, three off fourth-placed Bayer Leverkusen.
Bayer Leverkusen squandered a two-goal lead, conceding twice in the last two minutes to draw 2-2 against Mainz 05 on Saturday.
Goals from Robert-Nesta Glatzel in the 89th minute and Kevin Stoeger’s stoppage time equaliser turned the game around for the visitors.
Leverkusen were far superior in the first half, and Lucas Alario slotted in to complete a quick move in the 14th minute.
Patrik Schick looked to have finished off Mainz with a second goal for the hosts, who had also hit the woodwork, in the 84th but the visitors’ late double strike earned a surprise point for them.
Leverkusen are fourth on 36 points, two behind VfL Wolfsburg in third place.