Boeser cut it to 2-1 when he shot a bouncing puck past Swayman from the left face-off dot after a cross-ice pass from Nikita Zadorov.
The play started with Miller winning an offensive zone face-off.
"Whether we won or lost, I thought that we just played an awesome 60 minutes,” Miller said. “Sometimes they're going to go in and sometimes they're not.”
Boqvist put Boston ahead 1-0 at 5:27 of the second period on a breakaway after getting behind Hronek following a neutral zone face-off battle. Boqvist took a pass from Justin Brazeau, who was playing his third NHL game, around defenseman Quinn Hughes and scored with his forehand around the outstretched right pad of Demko.
“I just found the puck and I heard the bench yell ‘two,’ so I tried to look over and put it to an area because I know how fast he is and how skilled he is,” Brazeau said. “So, it was a nice play by him.”
Heinen made it 2-0 at 11:15, shoveling the puck inside the left post from the top of the crease after Trent Frederic’s wraparound attempt.
“I kind of know he's going to try to put it far post across the crease there, so just try to stay kind of backdoor and luckily I chipped it in,” Heinen said. “I guess that's where you got to go to score goals.”
Boston was outshot 17-5 in the third period.
“I just don't think we played the right hockey in the third period,” Bruins defenseman Brandon Carlo said. “From getting pucks north out of the [defensive] zone, to getting pucks behind them, playing the right style of game to kind of limit their chances, I don't think we did a good enough job at that.”
NOTES: Boeser had scored just one goal in 10 games since playing in the NHL All-Star Game on Feb. 3. … Boston defenseman Matt Grzelcyk played 19:39 in his return after missing one game with a lower-body injury. … The Canucks tied their record for wins through 60 games (also 2011-12 and 2010-11).