Serie A leaders Juventus suffered a shock 2-1 defeat at Verona as the battle for the scudetto took another twist.
Douglas Costa saw an early effort rattle the crossbar before the hosts – unbeaten in seven league games – had a goal ruled out by VAR for offside after Marash Kumbulla's glancing header from a free-kick.
Cristiano Ronaldo struck the post late in the first half and then broke the deadlock following a swift counter attack on 65 minutes.
The home fans were screaming for a penalty after Leonardo Bonucci deflected a header from Marash Kumbulla onto the crossbar with a raised arm.
Inter could now go level on points with Juventus at the top of the table – if they win the Milan derby on Sunday, while Lazio can also close to within a point.
Earlier, Atalanta had consolidated their place in the top four after coming from behind to win 2-1 at Fiorentina, while Torino started life under new boss Moreno Longo with a 3-1 home defeat to Sampdoria and finished the match with 10 men.
Dortmund – driven on by January signing Erling Braut Haaland – had been out to further close the gap on the top two as they went in search of a fourth straight league win following their midweek DFB-Pokal cup defeat at Werder Bremen.
Midfielder Emre Can, playing against one of his former clubs, put Dortmund in front with a fine curling effort after 33 minutes, but Volland levelled at 2-2 just before half-time.
Raphael Guerreiro added a third for the visitors on 65 minutes but Leverkusen finished strongly as substitute Leon Bailey (81) slotted in before a towering header from captain Lars Bender (82) sealed a memorable win.
Klaus Gjasula's late goal saw bottom club Paderborn pick up a point after a 1-1 draw at Schalke, Werder Bremen's problems continued with a 2-0 home defeat by Union Berlin and Luca Waldschmidt's penalty just before half-time was enough to give Freiburg a 1-0 home win over Hoffenheim.
Jorge Molina broke the deadlock just before the hour and then added a well-taken individual effort on 67 minutes.
Valencia had defender Alessandro Florenzi sent off with 12 minutes left for a late tackle, and Jaime Mata scored Getafe's third on the break in the closing stages.
In Ligue 1, Dimitri Payet's fine 25-yard strike early in the second half gave Marseille a 1-0 win over bottom club Toulouse.
Rennes, though, lost ground in the chase for second place after being held to a 0-0 draw at home by Brest.
At the other end of table, strugglers Amiens lost 2-1 at home against Monaco, who scored twice in the last five minutes through Wissam Ben Yedder and Islam Slimani.
Dijon thought they had picked up a crucial win after a late goal from Stephy Mavidi – but Nantes snatched a dramatic 3-3 draw when Andrei Girotto looped in a header from a free-kick deep into stoppage-time.
Bordeaux came from behind win 2-1 at Metz and Nice went down 3-1 at home to Nimes.