The Edmonton captain tapped a pass from Darnell Nurse into the net for his 20th goal of the season.
The Oilers (20-16-2) outshot the Canucks (18-19-3) 50-27 but struggled to get pucks past Vancouver goalie Spencer Martin until midway through the third period.
Ryan McLeod finally got Edmonton on the board and Leon Draisaitl added another goal to knot the score at 2-2.
Tyler Motte, with a short-handed tally, and Elias Pettersson scored for Vancouver.
Mikko Koskinen had 25 saves for the Oilers while Martin registered 47 for the Canucks.
Draisaitl nearly ended the game in overtime, slipping around Brock Boeser near the boards and getting a clean shot off from in tight but Martin was there to make the stop.
The German sniper forced extra time, evening the score 10:24 into the third. He blasted a one-timer past Martin for his 29th goal of the season.
The Oilers came into the game boasting the league's best power play (30.5 per cent) and were 1-for-3 with the man advantage. The Canucks came in with the worst penalty kill in the NHL (67 per cent) and were scoreless on their lone power play.
Edmonton got on the board 6:33 into the third when McLeod unleashed a rocket from the bottom of the faceoff circle and his shot squeaked between Martin and the post.
The goal, McLeod's fifth of the season, prompted cheers of ``Let's go Oilers!'' from the Edmonton fans littered around Rogers Arena.
A crucial block led to Vancouver's second goal of the night.
With Juho Lahmmikko in the penalty box for holding Draisaitl, the Canucks were tasked with shutting down the Oilers' potent power play.
Miller used his stick to deny McDavid's shot, then picked up the puck and skated into the neutral zone, where he dished it off to Motte. Motte amped up his speed for a short-handed breakaway, then slid a shot under Koskinen's right pad to give Vancouver a 2-0 lead 17:13 into the second.
Motte got a similar breakaway during a Oilers power play midway through the final frame but Koskinen wasn't about to be beaten again. The Finnish netminder threw his legs out to make the stop, sprawling across the net.
Both sides were down a man earlier in the period when Pettersson opened the scoring.
McDavid had been called for interference on Matthew Highmore and Highmore for embellishment after he dropped to the ice in dramatic fashion.
Draisaitl nearly put Edmonton on the board during the ensuing four-on-four, but Martin stopped the powerful blast with his shoulder.
Moments later, Pettersson ripped a shot from the top of the faceoff circle, clanking it off the far post and in for his 10th goal of the season.
Edmonton seemed poised to open the scoring earlier in the frame when Yamamoto sent a laser careening toward the Vancouver net only to see the puck ping off both the post and crossbar.
The Canucks face the Jets in Winnipeg on Thursday to kick off a four-game road trip. The Oilers host the Nashville Predators the same night.
NOTES: The Oilers activated forward Ryan Nugent-Hopkins from long-term injured reserve Tuesday. He played his first game since suffering a lower-body injury against the New Jersey Devils on Dec. 31. ? Edmonton has placed goalie Mike Smith on long-term injured reserve with a thumb injury. ? The Canucks currently have five players in COVID-19 protocol (goalies Thatcher Demko and Jaroslav Halak, and forwards Bo Horvat, Conor Garland and Tanner Pearson). Assistant coaches Scott Walker and Kyle Gustafsson are also on the list. ? Vancouver defenceman Tyler Myers played his 800th NHL game.