The victory allowed the Canadiens (40-23-8) to remain two points ahead of the Senators (39-23-8) atop Atlantic Division.
Andrew Shaw, Phillip Danault and Brendan Gallagher scored for the Canadiens. Derick Brassard, Ryan Dzingel and Erik Karlsson each had goals for the Senators.
Carey Price made 28 saves in the Montreal net while Craig Anderson, who missed the previous two games with a lower-body injury, stopped 29 shots.
The Canadiens scored twice in a 31-second span to overcome a 2-1 deficit early in the third period.
Danault tied the game at the 6:15 when he gathered a loose puck in the right wing circle then stuffed a shot between Anderson's legs for his 11th goal of the season.
Gallagher struck next, squeezing a shot past Anderson on the short side from the left wing circle. It was his eighth of the season.
Karlsson tied the game with 4:57 left in regulation time, taking a low wrist shot from the point that made it past numerous players before beating Price low on the glove side.
The goal was Karlsson's 14th.
The Senators held a 2-1 lead after 40 minutes thanks to goals 1:16 apart in the second period that erased Montreal's lead.
Shaw opened the scoring at 2:37 of the second period with a tap-in for his 11th of the season. The goal was set up by Danault, who jumped on a loose puck at the side of the net when it was missed by the Senators' Cody Ceci and Alex Burrows, then flipped a pass over the stick of a diving Burrows.
The Senators evened the count with Danault in the box at the 12:36 mark when Kyle Turris sent a backhand pass from the left wing boards to Brassard, who one-timed a shot that beat Price low to the stick side. It was the 13th of the season for Brassard.
The Senators then jumped into the lead.
Scoring his 14th goal of the season was Dzingel, who spotted a loose puck off the post to Price's left and poked it over the line at the 13:52 mark.
The Canadiens outshot the Senators 13-9 in the scoreless first period.
NOTES: Senators D Mark Borowiecki returned to the lineup after a four-game absence, meaning D Fredrik Claesson was a healthy scratch. Other Senators scratches were F Chris DiDomenico and D Jyrki Jokipakka ... Senators LW Ryan Dzingel played his 100th NHL game ... Canadiens healthy scratches were RW Michael McCarron, LW Andreas Martinsen and D Alexei Emelin ... Canadiens C Brian Flynn was also scratched with a suspected upper-body injury.