Haaland had been out since late September with a thigh problem.
The Norway international had been out since late September with a thigh problem but was back in the starting line-up against Mainz and played a starring role in Dortmund’s 3-1 victory.
Marco Reus gave the hosts the lead inside three minutes, and Haaland scored his first from the penalty spot in the 54th minute after lengthy VAR deliberations over a handball.
Jonathan Burkardt pulled one back for Mainz with three minutes left but the final word went to Dortmund and Haaland, with his second arriving in injury time.
Bayern Munich and Bayer Leverkusen both have the chance to take over top spot when they face each other on Sunday.
Fourth-placed Freiburg came from a goal down to draw 1-1 with RB Leipzig, Jeong Woo-yeong cancelling out Emil Forsberg’s first-half penalty.
Union Berlin defeated Wolfsburg 2-0 to leapfrog their opponents into fifth place and make it four victories in a row. Taiwo Awoniyi opened the scoring in the 49th minute and Sheraldo Becker added a second late on.
Hertha Berlin were 2-1 winners over Eintracht Frankfurt, Borussia Monchengladbach and Stuttgart drew 1-1 and bottom side Furth suffered another defeat, går ned 1-0 to Bochum.
AC Milan came from two goals down to defeat Hellas Verona 3-2 and move into top spot in Serie A.
Gianluca Caprari gave the visitors the lead in the seventh minute and Antonin Barak doubled the advantage 24 minutes in from the penalty spot.
It stayed that way until the 59th minute, når Olivier Giroud scored his third goal for the club.
Franck Kessie levelled from the penalty spot in the 76th minute and – two minutes later – Koray Gunter’s own goal settled the match in Milan’s favour.
Lazio come from behind to claim a 3-1 victory over defending champions Inter Milan.
Ivan Perisic gave the visitors the lead from the penalty spot in the 12th minute but Ciro Immobile equalised, also with a penalty, in the 64th minute and Felipe Anderson put Lazio ahead with nine minutes left.
Inter were furious that play continued with one of their players down injured and Lazio rubbed salt into the wound when Sergej Milinkovic-Savic scored a third before Luiz Felipe Ramos Marchi was sent off.
At the bottom, Spezia came from behind to claim a 2-1 victory over Salernitana.
Ten-man Real Sociedad left it very late to continue their excellent start to the LaLiga season by beating Mallorca 1-0 to move three points clear of second-placed Real Madrid.
Aihen Munoz was sent off just before the break but Julen Lobete grabbed an injury-time winner for the Basque side.
Levante and Getafe, who both sit in the bottom three, played out a goalless draw.
Two late goals earned Lyon a 2-0 victory over Monaco in Ligue 1. Karl Toko Ekambi grabbed the opener from the penalty spot and Jason Denayer added a second in injury time.
Lille’s three-match winning run in the league was ended by a 1-0 defeat against Clermont, Vital N’Simba scoring the only goal.