Bayern began the derby with the intention of building their lead at the top of the Bundesliga, with nearest rivals Bayer Leverkusen being held to a 0-0 draw by Union Berlin earlier on Saturday. However, a lack of end product prevented either side from opening the scoring in the first half, despite Michael Olise looking sharp on the ball with Thomas Muller and Harry Kane waiting for service in the middle.
Josip Stanisic headed over the bar while Olise tested Gregor Kobel when played through, but it was Kane who had the best opportunity of the opening 45 minutes, seeing his fierce shot batted away by the visiting goalkeeper minutes before the half-time whistle was blown.
Dortmund had threatened in spurts but it was still a shock when they opened the scoring in the 48th minute. Niko Kovac's side raced away on the counter-attack and Maximilian Beier arrived at the back post to out-jump Kim Min-jae and head in Julian Ryerson's deep cross.
Shocked to be behind, Vincent Kompany made changes from the bench and was so nearly rewarded with an equaliser when substitute Raphael Guerreiro's cross was almost put into his own net by Waldemar Anton, the ball looping over Kobel and onto the crossbar. It was Guerreiro who finally netted the goal Bayern's dominance deserved as he whipped in Muller's lay-off in the 65th minute.
Things got even better soon after when substitute Serge Gnabry drove down the left, evading some limp Dortmund challenges, and fired Bayern into the lead with a cool finish into the bottom corner. However, Dortmund responded almost instantly as Bayern failed to clear their lines from a corner and Anton prodded in after Jonas Urbig's last-ditch save.
Kane struggled to make the most of his opportunities throughout the game and missed a gilt-edged chance to put Bayern ahead again, seeing his volley hit the post when he could have stooped to head it in. No winner arrived as both teams had to settle for a 2-2 draw, with Bayern missing a glorious opportunity to all-but wrap up the title.