Penner connected on a one-timer from the high slot that beat Coyotes goaltender Ilya Bryzgalov with 21.3 seconds left on the clock.
The win ended a five-game losing streak for the Oilers and sent Phoenix to its fourth loss in five tries.
Penner's goal capped a 3-goal third period for the Oilers. Taylor Hall and Linus Omark scored early in the period to give Edmonton a 3-2 lead before Scottie Upshall tied it for Phoenix at 8:29.
Upshall also scored in the first period and Kyle Turris had a goal in the second period.
Jean-Francois Jacques added Edmonton's other goal in the second period and Devan Dubnyk made 24 saves in the victory.