Robert Lewandowski had a goal ruled out for offside two minutes later, and despite BVB's dominance for the rest of the half, they failed to add to their tally.
The game exploded into action in the second half. Nine minutes into it Arjen Robben equalised for Bayern after being set up by Philipp Lahm.
Within three minutes, however, Dortmund were 3-1 up. First Daniel van Buyten turned the ball into his own net and then Ilkay Gundogan cut inside on the edge of the box to guide a low finish into the corner.
Robben scored again with 25 minutes left to play with a neat turning finish, but despite Thomas Muller crashing the woodwork, Dortmund had the final say with Reus adding his second late on.