North End led in the 32nd minute as in-form striker Iain Hume grabbed his sixth goal in as many games.
Preston proceeded to dominate the periods either side of half-time and a fourth win in five games looked on the cards for Phil Brown’s men.
However slack marking allowed Halford to nod an equaliser and some shaky defending in the closing stages meant Portsmouth might have claimed all three points.
Preston sit ahead of bottom club Sheffield United on goal difference and are seven points from npower Championship safety with six games to play.
Aaron Mokoena and Joel Ward came into the Portsmouth line-up for Ricardo Rocca and Liam Lawrence, who missed out through suspension and injury respectively, while Preston were unchanged from the side that lost 2-1 at Reading on Tuesday.
The visitors could have opened the scoring inside the first 30 seconds, but on-loan Fulham forward Eddie Johnson fired wide from 15 yards following some cute build up play from Hume.
Ward had Portsmouth’s first chance, and perhaps should have done better when his shot from David Cotterill’s cross was saved by Iain Turner in the Preston goal.
Hume was proving to be a constant threat for North End and he capitalised on a slip from Mokoena in the 11th minute but slashed wide.
Just before the half-hour Portsmouth’s former Preston striker David Nugent darted towards the area and cleverly exchanged passes with Hayden Mullins before shooting wide from 18 yards.
Moments later a low drive from makeshift North End full-back Barry Nicholson drew a save from Jamie Ashdown.
However the Pompey goalkeeper was soon picking the ball out of his net.
Following his early chance, Johnson turned provider as Hume sprung the offside trap to collect his pass and coolly slot home.
Preston ended the opening period in the ascendancy and nine minutes before half-time Hume almost netted again, but Ashdown saved well after the Canadian forward met Nicholson’s cross on the volley.
The second half began in similar fashion and Keith Tracey collected Hume’s pass to draw another save from Ashdown.
Johnson then headed goalwards and a mishit cross from Tracey almost looped in, so it came as a surprise when Portsmouth levelled in the 62nd minute.
The goal will have disappointed North End boss Brown as Halford was allowed space to power in a free header from Mullins’ corner.
Five minutes later Halford almost repeated the trick, but Turner save with his feet.
Hume continued to be Preston’s main threat and in the 70th minute he engineered space to fire a left-foot shot that saw Ashdown smartly down to his right to tip round the post.
Back came Portsmouth and with 15 minutes to go Ward came within inches of turning in Nugent’s cross at the far post.
It was the home side who finished the stronger as Nugent shot wide in the 80th minute and a barrage of late corners and long throws wrought havoc in the Preston box.