The Flames went ahead 2-1 at 14:31, one second after a power play ended, when Andrew Mangiapane's one-timer deflected off Benn and defenseman Nate Schmidt.
"You just feel for your goaltender, you feel for the guy back there grinding and giving you a chance, and then something like that goes in," Schmidt said.
Pettersson agreed.
"It's not going our way right now," he said. "We had our looks, we created chances, we spent most of the time in their zone. Two unlucky bounces. It's frustrating."
Johnny Gaudreau made it 3-1 at 5:58 of the third period with a breakaway shot over Demko's glove 10 seconds after a Canucks power play ended.
"After that, I thought we really squeezed them," Giordano said. "We didn't give them much through the neutral zone, we were making good plays. They're not all going to be nice and pretty."
Markstrom has made 90 saves on 93 shots in three games against his former team.
"This guy is so well prepared for every hockey game, I don't think he cares where he's playing, to be honest with you, whether it's home, here, anywhere else," Flames coach Geoff Ward said. "He's such a competitive guy, he takes so much pride in his personal performance and the way that he prepares. He wants to win at everything."
NOTES: Canucks forward Justin Bailey left 1:19 into the second period with an upper-body injury after taking a hit from Flames forward Milan Lucic. There was no update. … Vancouver forward Jay Beagle, who was born and raised in Calgary, played 7:55 in his 600th NHL game. … Boeser (two goals, three assists) and Pettersson (two goals, three assists) each has a five-game point streak. … Mangiapane has five points (three goals, two assists) during a four-game point streak.