Jonathan Drouin, Matthew Peca and Nicolas Deslauriers each had a goal and an assist, and Max Domi had three assists for Montreal (8-5-3), which lost consecutive games for the first time. Carey Price made 25 saves.
"Let's just cut to the chase, I just didn't play very good tonight," said Price, who has allowed at least four goals in his past four starts.
"Unfortunately, that position is one that you can really pinpoint because we've got players that can play really bad one night, but because they're surrounded by other players around them it doesn't show as much," Canadiens coach Claude Julien said. "That's the sad part of a goaltender's position is that, as you can see, we're looking more at him when the rest of our team wasn't any better."
Skinner scored his second goal of the game, his 11th, at 2:20 of the third to tie it at 5-5.
"They had a lot of Grade A scoring chances and sometimes when you're giving those up you hang your goalie out to dry a little bit," Peca said.
The teams combined for six goals in the first period, including four in a span of 1:46.
Sobotka made it 1-0 at 6:08 when he scored on a pass from Evan Rodrigues on a 2-on-1.
Drouin tied it at 1-1 at 9:14 when he redirected Domi's centering pass for his fifth goal.
Rodrigues set up Sobotka's second goal, his third of the season, to make it 2-1 at 14:40. Peca scored 10 seconds later to tie it at 2-2.
Sheary made it 3-2 at 15:52 with his sixth goal in his 200th NHL game. Andrew Shaw tied it at 3-3 at 16:26.
Skinner gave Buffalo a 4-3 lead at 5:34 of the second, but Tomas Tatar scored his third goal in two games at 10:17 to tie it at 4-4.
Deslauriers gave the Canadiens their first lead at 5-4 with a shorthanded goal at 18:03.