Tim Connolly, Thomas Vanek and Drew Schiestel also scored for Buffalo (3-1), and Tyler Myers had two assists. Jhonas Enroth stopped 28 shots.
Mathieu Darche and Ryan O'Byrne scored early in the second for Montreal (3-3), briefly tying it at 2. Tom Pyatt had the Canadiens' final goal midway through the third, and Alex Auld made 32 saves.
The teams combined for five goals in a span of 7:30 in the first half of the second period. Adams scored 1:41 in before Buffalo quickly blew a 2-0 lead.
Connolly put the Sabres ahead once again at 7:50 when he snapped a shot into the top right corner on a 5-on-3 to make it 3-2. Adam, who scored his first goal unassisted on a wraparound, then gave Buffalo a two-goal lead for the second time with his second tally of the period at 9:11.
Schiestel made it 5-2 with another power-play goal 7:22 into the third.
Andrei Kostitsyn came close to making it a one-goal game later in the final period. Referee Eric Furlatt immediately waved off the goal, ruling that the Canadiens right wing had directed the puck into the net off his skate.
Vanek opened the scoring with a power-play goal 4:38 in. Auld stopped Myers' point shot but Vanek spun away from O'Byrne in the goalmouth to put the rebound into an open right side.
Darche cut it to 2-1 just 15 seconds after Adam's first goal with an unassisted tally off a turnover behind the Sabres' net.
O'Byrne got credit for tying it at 2 moments later. The Montreal defenseman's shot from the right side deflected off defenseman Steve Montdor's stick and past Enroth at 3:20.
Montreal plays its final preseason game Saturday night against the New York Islanders in Quebec City.
Buffalo wraps up its exhibition schedule with a pair of games against Philadelphia on Friday and Sunday.