The hosts' victory at the Dinamo Stadion on Tuesday night opened up a three-point lead at the top of Champions League Group F.
Goals Alexander Pavlov and Vitaly Rodionov put the Belarusian champions in charge and although Bayern pulled one back in stoppage time through Franck Ribery, BATE added a third through Renan Bressan to seal their first ever home win in the competition.
The victory means unfancied BATE have now won both their group matches having previously downed Lille 3-1 away, while for Bayern the defeat ends their nine-match winning streak at the start of the season and leaves them on three points in Group F.
Bayern actually bossed the first half both in terms of possession and goalscoring opportunities, but it was BATE who made the key breakthrough thanks to Alexander Volodko's 23rd-minute finish.
Bayern survived a scare early on when Manuel Neuer was called on to parry an effort from Rodionov, but the German giants soon started to take control and Mario Mandzukic was just unable to finish off a good move before Toni Kroos struck the woodwork.
The Germany international looked to have done the hard work as he robbed Dmitri Likhtarovich of possession and rounded home goalkeeper Andrei Gorbunov, but he was pushed wide and even though the goal was unguarded, he could only hit the post.
Bayern came close again in the 16th minute with Gorbunov saving at the second attempt following a well-struck effort from Holger Badstuber.
A goal looked on the cards, but the surprise was that it came at the other end.
Denis Polyakov laid a deep cross back to Volodko and although he completely mishit his shot, it fell invitingly for Pavlov to sweep home a half-volley near the penalty spot.
Gorbunov did superbly to tip over Thomas Muller's header before making a more regulation save to keep out Mandzukic's header.
The visitors almost found themselves 2-0 down in the 55th minute when Denis Polyakov fired in a thunderous effort that needed a superb save from Neuer to keep out.
Rodionov shot over before Pavlov did likewise with an even better opportunity four minutes later after being picked out unmarked by Alexander Hleb eight yards out.
Muller missed a goal chance to get Bayern back on level terms but, with the Germans pushing forward, BATE continued to look dangerous on the break and they made it 2-0 in the 78th minute.
Rodionov played an incisive one-two with Edgar Olekhnovich on the edge of the area before lashing a shot past Neuer at his near post.
Bayern stormed forward in a last-gasp bid to get something out of the game, but Gorbunov produced brilliant saves to deny Claudio Pizarro and Ribery.
Ribery did finally beat Gorbunov after latching onto Xherdan Shaqiri's through-ball, but Bayern could not find an equaliser and BATE sealed the win when substitute Bressan slotted home following a counter-attack.