The Netherlands international had the chance to rescue a point for the Bavarians late on, but saw his finish from the spot saved as BVB achieved a crucial victory
After an exciting first half which offered no goals but plenty of action, Robert Lewandowski popped up with a strike after the break to seal three decisive points for Jurgen Klopp's men, but Bayern will be left to rue a late penalty miss from Arjen Robben, whose tame effort was saved by Roman Weidenfeller.
Dortmund had defeated their rivals in their last three outings, and the match got off to an exciting start, with three good chances in less than five minute. First, Mario Gomez saw a header from inside the box saved, and shortly after Jakub 'Kuba' Blaszczykowski fired wide in a one-on-one with Manuel Neuer.
The Bayern Munich goalkeeper was called into action once again moments later when he pulled off an immense reflex save to deny Kevin Grosskreutz from close range, and then managed to parry a subsequent shot by Lewandowski.
The tempo dropped in the following minutes as most of the action took place in the centre of the pitch. In a rare chance in the final third, an opportunistic long pass to Lewandowski in the 20th minute almost reached the striker, who was, however, beaten to the ball by Neuer.
On the half-hour mark, Toni Kroos send a crashing drive from outside the box just wide of the right post and shortly after Kuba sent a poor effort at the goalkeeper after winning the ball off Franck Ribery.
Lewandowski then rattled Bayern Munich's left post with a towering header from inside the box as the game edged towards half-time. Indeed, this episode proved to be the final moment of interest for the first period.
Shortly after the restart, Kuba had a low shot from range saved by Neuer in the right corner as neither team seemed able to get anywhere near the opposition's penalty area.
On the hour mark, Ribery had an opening from the left side of the box fly just wide as Bayern slowly gained momentum.
The Bavarians saw more of the ball in the following minutes and were taking advantage of Dortmund's sloppy passing to launch counterattacks. In a rare chance for the German champions, Kagawa sent a low shot from outside the box wide of the right post.
Against the run of play, however, Lewandowski opened the scoring. An opportunistic strike from well outside the box reached the Polish striker and he backheeled past Neuer, as Robben played him onside well behind Bayern Munich's defensive line.
The Bavarians threw everything forward in the final minutes of the game and won a penalty in the 82nd minute. Robben, who had won the kick, saw his finish from the spot saved by Weidenfeller as Jupp Heynckes' men were set for a bitter defeat which would effectively put an end to their title challenge.
The Dutchman missed once again, this time from close range in the final minutes of the game as Subotic headed onto his own crossbar, and when the rebound broke to the Dutchman, he blasted high into the stand.
In the following attack Lewandowski hit the bar as Dortmund went on the counter, and despite the late drama, the match ended 1-0 in favour of Jurgen Klopp's men.
Following tonight's result, Borussia Dortmund are first in the standings with 69 points, while Bayern Munich are second with 63. BVB's next league game is a visit to Schalke on Saturday, while the Bavarians host Mainz on the same day.