Edmonton, after missing numerous close-range chances, came charging back, tying it on Jean-Francois Jacques' double-redirect goal in the second period and scoring twice more early in the third.
Taylor Hall got the first 3 minutes in, scoring Edmonton's second power-play goal in 54 chances on a shot that caromed off Coyotes defenseman Sami Lepisto's skate.
Upshall then scored his second goal just a few minutes later, seemingly giving Phoenix the momentum at home.
Instead of deflating, the Oilers rose up, turning up the offensive pressure until Penner scored the winner on a cross from Hall to give Edmonton its third win in 17 games.
"I think we've played well most every game, but we haven't had the kind of luck like we need," Linus Omark said. "It's a good start to win this game and move on to the next."
The Coyotes are wondering what's going to happen next after one of their most disappointing losses of the season.
Phoenix looked good early and rallied after Edmonton's two quick goals in the third period to tie it on Upshall's one-timer from Shane Doan.
The Coyotes just couldn't keep up with the Oilers over the final 10 minutes as Edmonton peppered goalie Ilya Bryzgalov with shot after shot until Penner's winner sent them to their fourth loss in five games.
"It's very disappointing," Coyotes coach Dave Tippett said. "There's some games when you feel like you're committed, you play hard, you do things that allow you to win. Tonight, we didn't do enough of that."
Part of the reason could be that the Coyotes are worn out.
Phoenix played 16 games in 27 days, getting consecutive days off just once. Edmonton marked the Coyotes' final home game before the All-Star break, but they have to turn around and face Colorado on the road Wednesday night -- their 12th back-to-back after having a dozen all last season.
Edmonton figured to be just the opponent Phoenix needed.
The Oilers have had trouble no matter what the schedule's been like, ranking near the bottom of the NHL in goals scored and goals allowed -- not a good combination. Edmonton entered with the Western Conference's worst record at 14-25-8, 33 points behind Vancouver in the Northwest Division.
The Oilers appeared to be headed for more trouble early against the Coyotes.
Yandle, added to the All-Star game as an injury replacement earlier in the day, had an assist on the opening goal on a pass that deflected off Edmonton defenseman Tom Gilbert right to Upshall, who beat Devan Dubnyk gloveside for the power-play goal.
Yandle keyed the second goal, too, catching the Oilers off guard with a pass from his own blue line to a streaking Ray Whitney at Edmonton's line for a 3-on-1. Whitney sent a cross to Turris, who one-timed it over Dubnyk's glove shoulder for a 2-0 lead that should have felt comfortable but somehow didn't.
"They're a young, hungry team and they're not going to roll over for anyone," Yandle said.
He got that right.
Jacques scored on an impressive tip-in on Zack Stortini's redirected shot in second period, then Hall opened the third with his power-play goal. Omark gave the Oilers their first lead 72 seconds later, taking a nifty pass from Sam Gagner through traffic from behind the net.
Even after Upshall tied it, the Oilers kept coming, getting the much-needed win on a mis-hit shot by Penner that trickled past teammate Shawn Horcoff, who had blocked Bryzgalov's vision.
"It's not always pretty, it's not always what you want as a coach, but the one thing you've got to start with is the requisite effort," Renney said.
Phoenix D Ed Jovanovski returned after missing five games with a lower-body injury. ... The Coyotes had killed 12 straight penalties before Hall scored in the third period. ... Edmonton became the first team to beat Phoenix (19-1-2) when trailing after two periods.