A small crowd were not treated to a chance-laden encounter against Northampton, but it was always the hosts who looked more likely to progress.
Evans completed an attractive passing counter-attack to open the scoring a few minutes before the interval.
O’Keefe doubled their lead in the second half and only some impressive saves from David Cornell prevented the margin of victory being even greater.
Kenny Jackett made three changes from the side that beat Plymouth in the league the previous week.
Christian Burgess returned from suspension to replace the injured Oliver Hawkins in defence, while the sidelined Kal Naismith made way for Curtis Main up front.
The other switch saw loanee O’Keefe recalled in the centre of the pitch, with Ben Close, who was nursing a knock, missing out.
A sparse attendance ensured there was an eerie atmosphere inside Fratton Park when the game got underway.
And the action on the pitch did little to warm the spirits of those fans who decided to spurn Christmas shopping to watch the contest.
There were a couple of half chances for the hosts, with O’Keefe’s volleyed effort flying over, while an audacious long-range free-kick from Christian Burgess landed on the roof of the net.
Neither side looked particularly threatening in the opening stages, however, as the game drifted along.
Main headed a difficult chance wide after rising above two defenders to meet Nathan Thompson’s cross.
Evans then drilled a low shot narrowly past the post, while Cornell – who previously had a loan spell at Fratton Park – just about beat Conor Chaplin to a loose ball.
The tie finally got going on 35 minutes, when Danny Rose slipped a fine pass through to Evans, who was denied by Cornell’s save.
Northampton had offered little at the other end, although Burgess made a timely challenge to dispossess Chris Long in the box.
And it was the Blues who broke the deadlock just before the break, courtesy of a fine passing move up the pitch.
Brandon Haunstrup released Evans, who in turn found Chaplin before bursting into the box to receive the ball back.
Chaplin dinked a cross into the centre, and EVANS was there to head home his first goal of the season.
Northampton Town 0
The advantage was almost doubled early in the second half, as Haunstrup delivered a dangerous low cross that Ash Taylor had to turn over his own crossbar.
But it then took a superb save from Luke McGee to stop the Cobblers from levelling, with the keeper diving to his right to stop Taylor from converting Lewis McGugan’s corner.
Cornell made his own decent stop when Main inventively flicked Rose’s centre towards the net, although the linesman had raised his flag for offside.
The lead did increase just before the hour mark, however, as Thompson cut the ball back for O’KEEFE to neatly steer into the bottom corner.
A third might have followed when Thompson stole back possession, but Evans’ effort from out wide flashed past the post.
Jackett made his first switch on 69 minutes, with Drew Talbot given a chance to impress in place of Haunstrup at left-back.
Evans and Chaplin were off target with shots, as the Blues tried to wrap the tie up with plenty of time to spare.
Main then saw an attempt roll agonisingly wide following good work from Rose and Chaplin to tee him up.
And Cornell made a string of fine saves to limit the damage late on, denying Main, Evans and Chaplin in quick succession.
Pompey (4-2-3-1): McGee; Thompson, Burgess, Clarke, Haunstrup (Talbot 69); O’Keefe, Rose; Evans (c), Chaplin, Lowe (Kennedy 88); Main
Goals: Evans 41, O’Keefe 58
Subs not used: Bass, Casey, May, Bennett, Lethbridge
Northampton (4-4-2): Cornell; Moloney, Barnett, Taylor, Buchanan; Hoskins (Bowditch 63), Poole (Waters 78), McGugan, Crooks; Richards (c), Long (Foley 46)
Subs not used: Coddington, Smith, McGivern, Kasim
Referee: Tom Nield
Attendance: 1,780 (128 away fans)