Both sides were looking to end difficult seasons on a high on the final day, including farewells to Lukasz Piszczek and Bender twins Lars and Sven, with Piszczek and Sven captaining their respective sides.
Haaland was looking for his 40th goal of the season in all competitions, and got it just five minutes in.
Reinier slid the striker in on goal down the left and he smashed the ball home through Lukas Hradecky's legs.
From that moment on, however, it was Leverkusen in control. Half chances went begging before Roman Bürki was tested for the first time after 36 minutes, with Karim Bellarabi finding Paulinho in front of goal, only for Dortmund’s No.1 to deny the Brazilian forward a goal on his first appearance of the campaign.
Marco Reus had a rare chance moments before the break, with Kerem Demirbay the hero with a sliding block in front of Hradecky.
Six minutes into the second half and Dortmund doubled its lead when Reus's free-kick bounced through and in beyond Hradecky and those waiting in the area.
Piszczek went close to scoring on his big day, but his header from Julian Brandt’s cross drifted just wide of goal.
Leverkusen continued to push for a goal on the counter-attack, but with Jadon Sancho and Mats Hummels coming on midway through the second half, the home side looked more and more comfortable as the game went on.
Piszczek's special moment came with 15 minutes to play as he came off to a guard of honour from his team-mates.
Haaland notched his 40th Bundesliga goal in the final 10 minutes after latching onto Wendell's attempted pass across defence.
Lars Bender came on in the final moments and minutes later slotted home a rare penalty to end his career with a consolation goal.