Two Haaland goals were disallowed for offside by VAR, but the Norwegian's third goal with 10 minutes to go was allowed to stand and rescued a 2-2 draw.
TSG also created chances of their own; Marwin Hitz made an equally impressive save in the 18th minute to deny Bebou, who had another chance to open the scoring six minutes later but fired narrowly wide of the mark.
Sancho's streak continues
Seconds later, BVB struck on the counter-attack. Guerreiro played a through-ball to Sancho and, with Diadie Samassékou appealing for offside, the Englishman kept his cool in front of Baumann, slotting home from twelve yards to make it 1-0.
Haaland then had a goal correctly disallowed for offside five minutes later, before the Norwegian almost scored another after Bellingham had won the ball back with his high press, but Stefan Posch made a last-ditch intervention in the box.
TSG fight back
Once again, failure to find the net at one end was punished by a goal at the other, with Dabbur slotting home Sebastian Rudy's pass to level the scores at 1-1 on 31 minutes.
In the build-up on that occasion and several others, the BVB defence struggled to impose themselves on the game and unfortunately for them, that remained the case after the break too.
Hitz did well to tip Dabbur's header onto the bar in the 50th minute, but couldn't do much to prevent the visitors going in front from the resulting corner. TSG played it short before Rudy crossed into the middle and Bebou beat Hitz to the ball to stab home.
Haaland had another goal ruled out for offside seven minutes later. Amid a scramble in the box, Mats Hummels poked the ball through to Thomas Delaney whose shot rebounded off the post and was tapped in by the striker - but Delaney was narrowly offside. The question was whether the ball had been played by an opponent.
BVB were unable to build up proper pressure, but levelled in the 80th minute thanks to individual play from Haaland. The young striker pounced a loose pass from Rudy to go through on goal and fire beyond Baumann.
There were 10 minutes plus plenty of time added-on to seal what would have been three fortunate points, but the hosts never really threatened thereafter.