Dortmund said Wednesday it had "reached an agreement in principle" for the transfer, which was to go ahead subject to a medical test.
"He’s really eager for the move, otherwise he wouldn’t do it," Dortmund sporting director Michael Zorc told the local Funke Media Group. "It’s not an easy step. It’s another fresh start for him. I like it."
The clubs agreed not to disclose the details of the deal. Kicker magazine reported that Dortmund had agreed to pay up to 38 million euros ($42.5 million) including bonuses for the 30-year-old defender, who joined Bayern from Dortmund for a reported 35 million euros in 2016.
Hummels played 118 competitive games for Bayern, scoring eight goals. He won the Bundesliga title in each of his three seasons at the club, and the German Cup in May.
Germany coach Joachim LÃ¶w dropped Hummels and fellow internationals Jerome Boateng and Thomas Muller from the national squad in March to make way for younger players.
Hummels reportedly agreed to a three-year deal at Dortmund, which he previously joined from Bayern in 2008 after being deemed not good enough.
Hummels won the league with Dortmund in 2011 and 2012, when he also claimed a domestic double. He was team captain when he left for Bayern.
Dortmund, which finished runner-up to Bayern after squandering a nine-point lead, has already signed Germany internationals Nico Schultz and Julian Brandt and Belgium winger Thorgan Hazard ahead of the new season.
Altogether, the club has spent about 125 million euros ($140 million) on new signings this off-season, offset somewhat by the sales of Christian Pulisic to Chelsea and Alexander Isak to Real Sociedad.