Tempers flared at the BayArena, and both sides had a star player dismissed in what proved to be a costly draw
Within 13 minutes, Michal Kadec and Mario Gotze were sent off, meaning that each will face a lengthy suspension.
The hosts took a very conservative approach and their deep defending frustrated the title holders, who, despite having the majority of possession, struggled to link between midfield and attack.
Dortmund got a lifeline shortly after the hour mark as Mats Hummels avoided a second booking for an ill-timed challenge, and within minutes Leverkusen's Michal Kadlec was sent off for a dangerous tackle. However, their advantage was short-lived, as Mario Gotze was dismissed in the 77th minute for kicking out at Hanno Balitsch.
Bayer had the better of the chances while still at full strength, and ought to have taken the lead in the sixth minute as Andre Schurrle was played through on goal. The former Mainz man was denied, however, by Roman Weidenfeller, who also made a superb save on 24 minutes from Stefan Reinartz's header.
Shinji Kagawa had the visitors' first real opportunity on goal in the 61st minute, but failed to round the heroic Bernd Leno, who pounced onto the ball. After stopping a well-taken volley from substitute Ivan Perisic, the Leverkusen goalkeeper again denied the Japanese playmaker on 76 minutes, as he made a heroic save from close range.
With both teams down to 10 men, the game opened up late and took a turn for the bizarre in the 83rd minute when Hummels headed home a free kick, but play was called back because referee Wolfgang Stark had not yet signalled that the ball could be put back into play.
In the end, neither side could break the deadlock, and each had to settle for one point. The result sees them remain level on seven points, with BVB in fourth place due to superior goal difference. Bayer sit sixth after four matches.