Keane’s 77th-minute strike – his first league goal for five years – flew past Simon Eastwood to cancel out a third-minute opener from Jed Wallace, whose shot had crept under Declan Rudd.
It was a third goal in as many games for 19-year-old Wallace, who in December was on loan at non-league minnows Whitehawk.
The Lilywhites could have equalised in the 12th minute but Jack King headed from Lee Holmes’ right-wing cross against the bar.
They almost levelled again five minutes later as Joe Garner hit a post from close range after collecting Yassin Moutaouakil’s mis-kick.
Soon after the break Pompey captain Johnny Ertl shot powerfully from distance but his effort was parried by Rudd.
Goalkeeper Eastwood then came to Pompey’s rescue when saving from King after 53 minutes and Will Hayhurst’s header five minutes later.
Substitute Graham Cummins headed at Eastwood after 70 minutes but Preston could find no way through until Keane let fly from distance.
Preston are now three games without a win while Pompey remain in the relegation zone, having been denied a fourth league win in March.