Josh Anderson scored, and Sam Montembeault made 35 saves for the Canadiens (5-15-2), who are 1-5-1 in their past seven games and 1-9-1 on the road this season.
"Yeah, it's frustrating," Anderson said. "I'm not going to lie here. I'm not going to sit here and go through it. Good first period, we are in the game, and then the second period, just got outworked. That's all we've been talking about this year. I don't have an answer for you. I don't know what to say. I really don't."
Thompson gave Buffalo a 1-0 lead at 4:08 of the first period. He helped force a turnover by Canadiens forward Artturi Lehkonen along the boards before receiving a pass from Olofsson and scoring from the slot.
Anderson tied it 1-1 at 12:44 when he intercepted a pass attempt by Skinner in the slot.
"They scored the first goal, we stayed with our game and tied it," Montreal coach Dominique Ducharme said. "We weren't able to maintain it over 60 minutes. That's what happened in the second period. We crack and we make bad plays with the puck. … Eventually, it's going to cost you."
Eakin made it 2-1 at 9:49 of the second period with a one-timer at the right side of the net off a backhand pass from Vinnie Hinostroza.
Kyle Okposo extended the lead to 3-1 at 15:45 with a shorthanded goal. He scored with a backhand off his own rebound after his initial pass attempt on a 2-on-1 was blocked by Chris Wideman.
"Obviously, when you have a four-minute power play, you hope to create momentum, create a goal, create something, and we did the opposite," Canadiens forward Jonathan Drouin said. "I made a bad pass to Nick (Suzuki) in his skates and it turned into a 2-on-1, 2-on-2, and they scored. It was a bit of a momentum breaker for us, but it's happening too often."