Defending Bundesliga champions narrowed the gap to the top of the table with their hosts after a gritty victory at the Allianz Arena
In a heated contest, Mario Gotze's solitary goal on 65 minutes made the difference as the title holders narrowed their gap to first place to just two points.
The first half was played like a chess match, with the two sides cancelling one another out. Bayern had an edge in the possession, with Toni Kroos in particular standing out as his team's primary distributor from defensive midfield.
However, the hosts were rarely able to venture into their final third, and were quickly closed down by the immensely industrious BVB. The only real chances they managed to carve out were Kroos' volley, which sailed narrowly wide on 17 minutes, and a sitter that the unmarked Franck Ribery poorly missed by smashing over the bar.
Dortmund looked to break with pace but were largely foiled before creating any chances. Robert Lewandowski played one cross that left goalkeeper Manuel Neuer stranded, but Rafinha managed to nod clear at the back post, and the two sides had to be content to enter the half-time break on level terms.
Space to work with remained very scarce for the two teams' illustrious attacks in the second half, but the balanced slipped slightly into Dortmund's favour as they managed to carve out more opportunities on goal. Lewandowski missed a free header on 51 minutes as he sent it over the bar, and later flicked on a clever ball to Kagawa, who was denied by a stunning save from Neuer. Gotze was first to the loose ball, but volleyed wide from the edge of the penalty box with the goal open.
Gotze, however, was not to spurn another opportunity as he finally broke the deadlock on 65 minutes when he pounced on Kagawa's deflected ball and slotted his effort into the lower left corner as his marker, Jerome Boateng, was left dumbfounded.
Bayern were initially stunned by the opener, but fought bravely back into the game. With a quarter hour left, Luiz Gustavo had a blistering shot from distance parried away, and shortly after, Ribery was in on goal on the counter-attack, but had his attempt saved by Roman Weidenfeller.
Holger Badstuber had a free kick curl over the bar with eight minutes to go, but their best chance came on 88 minutes as the unmarked substitute Nils Petersen struck a low drive wide of the left post.
The result sees Bayern's lead in the Bundesliga slip to just two points, as wins for Dortmund and Monchengladbach bring the second and third-placed teams to 26 points apiece.