Battle was 11-for-19 from the field and 6-for-12 from 3-point range, as Ed DeChellis' team shot 56.3 percent from the field.
Battle was just 1-for-5 at the foul line, however, as the Nittany Lions nearly gave the game back.
It was the first win in 17 trips to East Lansing for Penn State (17-5, 6-3 Big Ten) and its first four-game conference win streak since 1996.
Kalin Lucas had 23 points but missed a tying free throw and jump shot in the final 12 seconds for the Spartans (17-4, 7-2), who played without virus-plagued Raymar Morgan for 37 minutes and fell into a first-place tie with Purdue in the loss column.
Lucas was 7-for-21 from the field and 8-for-9 at the line. But that one miss and some unusually poor defense by his teammates kept Michigan State from having another chance in overtime.
Goran Suton and Chris Allen each had 11 points for Tom Izzo's team, which lost its second straight home game after winning 28 in a row in the Breslin Center.
Penn State overcame a 29-16 deficit with a barrage of 3-pointers late and took a 38-37 halftime lead. Battle had 18 of those points in the first 20 minutes.
The Nittany Lions used an 11-0 run to lead 59-49 on Battle's banked 3. They went up 68-56 before holding off a furious final surge.
With a 1-for-8 stretch at the line, Penn State opened the door but the Spartans didn't take advantage.
The back-to-back home losses are the first for Michigan State since December 1997 and the first in conference play since January and February of that year.