Connor McDavid had a goal and an assist for the Oilers (6-7-0), who had a three-game winning streak end. Mikko Koskinen made 22 saves.
"When you get six goals scored on you, there's a few things you need to clean up," Edmonton defenseman Darnell Nurse said. "We know we need to be better in our own zone and support each other in the middle of the ice. If we take care of that, we have enough offense."
Dillon Dube scored on the power play to put the Flames up 4-3 at 2:56 of the third period, and Gaudreau shot over Koskinen's glove on a partial breakaway at 5:16 to extend the lead to 5-3.
The goals came after the Oilers tied it 3-3 on a goal by Jesse Puljujarvi 1:18 into the third.
Nurse cut it to 5-4 at 8:55, and Bennett scored off a pass from Gaudreau from behind the net to make it 6-4 at 10:57. The assist was Gaudreau's 300th in the NHL.
"Great play by Johnny," Bennett said. "It was rimmed behind the net, Johnny picked it up quick and he just knew I was there, right on the tape, and that's an easy one for me. He's a pretty special player and really fun to play with."
McDavid and Leon Draisaitl each played the final 5:45 of the game for Edmonton, which included a power play, a timeout, and Koskinen being pulled for an extra skater with 3:07 remaining.
"They pushed back in the second and our response wasn't good enough, and then they got the upper hand and we were chasing a little bit the rest of the game," Nurse said. "We got a good start, but we have to carry that into the second and third and find a way to put the nail on it."