Nittany Lions quarterback Sean Clifford struggled in the first half but completed all five of his passes on the first drive of the second. The last was a 14-yard slant to Jahan Dotson, who was given lots of room by Ohio State cornerback Sevyn Banks.
The Buckeyes answered that with a 49-yard touchdown pass from Fields to Olave, who ran by Penn State cornerback Marquis Wilson two plays after he replaced an injured Joey Porter Jr.
They threatened again on their next possession but had to settle for a 22-yard field goal by Dominic DiMaccio.
That left the door open for the Nittany Lions, who climbed closer when Dotson made an acrobatic one-handed catch for a 21-yard touchdown on the second play of the fourth quarter. That came right after he picked up 37 with a similar grab.
After a Jeremy Ruckert touchdown catch of 10 yards from Fields, Dotson and Clifford hooked up for another score.
That got the Nittany Lions to within 13, but that was as close as they would get.
Ohio State missed a pair of chances to add on to the lead in the fourth quarter but came up empty.
FIRST HALF RECAP
Ohio State outgained Penn State by more than 200 yards in a dominating first half at Beaver Stadium, but the Buckeyes lead only 21-6.
Ohio State wasted no time, getting a 62-yard run from Garrett Wilson on an end-around on the first play from scrimmage and scoring two plays later when Master Teague bulled in from the 4-yard line.
The drive took only 1:17 off the clock.
The Buckeyes needed more time on their next possession but still scored in a tidy 2:42. They only have to go 45 yards thanks to a failed fourth down attempt by the Nittany Lions.
This time the Buckeyes struck from from 26 yards out as Fields connected with Chris Olave in the end zone.
Penn State struck back this time, driving 61 yards for a 31-yard Jake Pinegar field goal. The drive was extended by a personal foul on Barron Browning, who was charged with roughing the quarterback after a throw.
The Buckeyes extended their lead late in the second quarter when Fields took advantage of Penn State getting lined up late and found Jeremy Ruckert wide open over the middle for a 10-yard touchdown.
That made it 21-3 with 2:23 left in the half.
Ohio State appeared to run out the clock after forcing a Penn State punt, but officials ruled Justin Fields took a knee on fourth down with a second left.
That gave Jordan Stout a chance to kick a 50-yard field goal, and he made it to cut the deficit to two scores.