Franck Ribery put Bayern Munich in front early in the match, though Joe Hart should have done better in the Manchester City goal.
Thomas Muller doubled their lead after Gael Clichy went awol.
Arjen Robben put Bayern deservedly 3-0 up with a rare right-footed goal, with Hart again beaten at his near post.
City pulled it back to 3-1 through Alvaro Negredo.
Before Jerome Boateng was sent off for taking out Yaya Toure when he was the last man.