Toni Kroos gave Bayern the lead in the 67th minute, only to see Mario Goetze equalise seven minutes later at the Allianz Arena.
The result allowed Bayer Leverkusen, who beat Nuremberg 1-0 earlier on Saturday, to cut Bayern's advantage, while third-placed Dortmund, who had won their previous four league meetings with Bayern, remained 11 points off the pace.
Neither side created many chances in the early exchanges, with Dortmund's defence doing a good job of keeping the Bayern attack at bay but unable to threaten home goalkeeper Manuel Neuer.
Bayern coach Jupp Heynckes was forced to make a substitution after 37 minutes as Jerome Boateng replaced fellow Germany defender Holger Badstuber, who suffered a right knee injury.
Dortmund eventually built up some attacking pressure just before the break but Neuer made a fine save from Marco Reus' left-footed attempt in the 44th minute.
The visitors almost opened the scoring from a quickly-taken free-kick seven minutes into the second half, but Mats Hummels' shot was saved superbly by Neuer. And Mario Goetze found himself alone in front of goal five minutes later but could not get enough power in his header to beat Neuer.
When the deadlock was broken midway through the second period it was the home fans who were celebrating. Kroos, who collected a pass from Thomas Muller, danced past Neven Subotic and Hummels and blasted home a low left-footed shot.
The lead lasted only seven minutes, though. Reus' corner from the right was headed away by Mario Mandzukic but only to Goetze, who had space and time to chest the ball down and strike into the bottom-right corner.
Muller nearly scored Bayern's second goal in the 85th minute but his left-footed drive flew inches wide. And Kroos too thought he had snatched a winner a minute later but Dortmund goalkeeper Roman Weidenfeller came up with a superb reflex save.
Weidenfeller showed his class on two further occasions against Muller and Javi Martinez in the closing stages to frustrate Bayern, who had to settle for a share of the spoils.