Both clubs had already confirmed their places in the knockout stage, and several starting XI changes – including six made by Jose Mourinho – led to an open affair.
Bayern were superior for long periods after Kingsley Coman’s early opener, although Ryan Sessegnon marked his full Tottenham debut with the equaliser six minutes later.
Tottenham were given two warnings before Coman cushioned Serge Gnabry’s deflected pass and stroked the 14th-minute opener into the bottom-right corner.
Spurs quickly responded through Sessegnon. The 19-year-old rifled past Manuel Neuer at the near post after Jerome Boateng turned the ball into his path and, in the process, became Tottenham’s youngest Champions League goalscorer.
But after losing Coman to a suspected hyperextension of his left knee, Bayern’s advantage was restored by replacement Muller, making amends following a gilt-edged Thiago Alcantara miss on the rebound from a Gnabry shot against the post.
Muller was perfectly placed to convert the loose ball in the 45th minute after the upright denied Alphonso Davies at close range.
There was time left in a breathless first half for Coutinho to unleash a long-range shot that Paulo Gazzaniga tipped against the crossbar.
The Brazilian would not be denied in the 64th minute, his curling finish from the edge of the area giving the besieged Tottenham goalkeeper no chance.