Mikael Backlund also scored twice for Calgary, helping seal the win on a goal with 1:30 left in the third and adding an empty-netter in the final minute.
The Flames snuffed out any hopes of a comeback by the Bruins, holding them to just seven shots in the third period.
“There were some big blocks. Guys were paying the price,” Monahan said. “We’re here to win and you’ve got to do what you’ve got to do to get those two points.”
The Flames remained on top of the Western Conference wild card standings with their first victory in Boston since Nov. 25, 2016.
“I thought it was an excellent effort,” coach Geoff Ward said. “We played with an awful lot of composure. This is a hard building to play in, but I thought we came in and we did a really good job in terms of staying focused.”
David Rittich finished with 26 saves for Calgary.
Brad Marchand scored a shorthanded goal for the Bruins, who were playing their first home game since Feb. 15 and came out flat after a four-game road trip.
“We were stubborn. We kept wanting to put the puck in the middle of the ice and it wasn’t there,” coach Bruce Cassidy said. “We paid the price in the end.”
The Bruins, who beat the Flames 4-3 on Saturday in Calgary, have lost back-to-back games for the first time since a four-game skid in early December.
It was just the third home loss in regulation for the Bruins, who still lead the NHL with 90 points (39-13-12).
“We weren’t at our best, for sure. We didn’t have it all the way through the game,” Marchand said. “Just not our normal, upbeat high-energy game, but that’s going to happen in an 82-game schedule. You’re not going to be perfect.”
Tuukka Rask finished with 26 saves for Boston.
Marchand tied it at 1-all 10:08 into the second on a breakaway, scoring his 27th career shorthanded goal and extending his point streak to seven straight games.
Marchand stared down Backlund after the goal and the two exchanged a few words before officials stepped in and kept them apart.
“We were just having a chat,” Marchand said.
If Marchand was trying to fire up his teammates, the move seemed to backfire over the next few minutes as the Flames regained control of the game and held onto it the rest of the way.
Monahan scored his 20th of the season 13:25 into the second on a one-timer from the slot off a pass from Gaudreau, putting the Flames back up 2-1.
The Flames went on a power play when Boston’s Matt Grzelcyk was called for roughing 14:32 into the second. The Flames won the faceoff after the penalty and scored five seconds later when Monahan redirected a shot by Tkachuk.
“I just thought the guys did a really, really good job regrouping,” Ward said. “Real good response from a team that’s showing resiliency to be more and more of a characteristic every day.”
Tkachuk put Calgary up 1-0 when he backhanded in a rebound after a slap shot by Backlund went wide and took a hard bounce off the end boards.
Wagner poked in a loose puck during a scrum 13:09 into the third to pull Boston within 3-2.
Backlund set himself up with a pass off the boards coming up the ice and beat Rask with 1:30 left in the third.
NOTES: Nick Ritchie made his debut for the Bruins the night after coming over in a trade with Anaheim at Monday’s deadline… D Derek Forbort, traded to Calgary by Los Angeles on Monday, and Gustafsson played their first game for the Flames… The Bruins honoured G Jaroslav Halak in a pre-game ceremony for playing in 500 career games. Halak, who backed up Rask on Tuesday, reached the milestone Dec. 3 with a 2-0 shutout of Carolina… Boston C Par Lindholm played in his 100th career game and got an assist on Wagner’s goal.
Flames: At Nashville on Thursday night.
Bruins: Host Dallas on Thursday night.