Defender Linvoy Primus got the only goal as Portsmouth consigned Palace to their sixth defeat in eight games.
After a delayed kick-off, the Eagles were left to rue missed opportunities as Pompey keeper Shaka Hislop saved well from Andy Johnson and Ben Watson.
Valery Mezague missed a good chance for the visitors, but Primus headed in his first goal in 27 months from a corner.
Substitute Ricardo Fuller hit the post late on for Pompey, while Palace keeper Gabor Kiraly made several fine saves.
After the game had survived a morning pitch inspection, the kick-off was put back three times because of a problem with the Selhurst Park pitch.
With no undersoil heating, the playing surface was covered by a giant tarpaulin over Christmas - and Palace's ground staff took a long time to clear a heavy layer of ice which had collected on top of the tarpaulin, preventing them from winching it back.
But when the game finally did get under way, 42 minutes late, it was Portsmouth that were nearly caught cold.
Hislop - restored to the starting line-up as Jamie Ashdown had suffered a slight knock - saw his goal threatened twice in the opening minute.
He came out to block Johnson's effort after Primus failed to clear Danny Granville's cross, while seconds later Danny Butterfield blazed over the bar from long range.
Pompey wasted a gilt-edged opportunity nine minutes later, when the unmarked Mezague blazed high over the bar from nine yards out when he only had Kiraly to beat.
Both sides deployed five-man midfields with a lone ranger up front, but openings were plentiful - with Johnson soon denied by a great tackle by Arjan De Zeeuw, while Kiraly had to be alert to claim a dangerous Nigel Quashie shot following a quickly-taken corner.
The visitors also survived an appeal for a penalty when Wayne Routledge's cross appeared to strike the arm of left-back Matt Taylor just inside the box.
Palace's best chance of the first half came just after the half-hour mark, when Butterfield crossed and Watson's drilled shot from the edge of the area was met with a good low save by Hislop.
The Trinidad and Tobago international also came out well to claim the ball at the feet of the advancing Granville.
Pompey came out strong after the interval, with Steve Stone going close, while Kiraly showed his international class again when he palmed away a powerful header from Portsmouth's fit-again top scorer Yakubu.
The Hungarian also grabbed De Zeeuw's mis-hit shot after Palace failed to deal with a corner.
Palace were presented with another good opportunity when Taylor bundled Johnson over just outside the box, but Danny Granville's free-kick was beaten away by Hislop.
Gonzalo Sorondo's follow-up came off De Zeeuw's elbow, but again the Eagles' appeals for a penalty fell on deaf ears.
Velimir Zajec, in his first game as full-time Pompey boss, then immediately made a double substitution with Fuller and Diomansy Kamara replacing the disappointing Yakubu and Mezague.
Butterfield, making his first Premiership start of the season, again tried his luck from distance without troubling Hislop.
Fuller then raced past two defenders, but dragged his shot high and wide - while a Quashie effort took a wicked deflection off Fitz Hall and was palmed away for a corner by Kiraly.
Ice is cleared from the side of the Selhurst Park pitch
But Portsmouth then finally made the breakthrough as the resulting flag-kick by Patrik Berger was firmly headed in by the unlikely match-winner Primus - who had last found the net in a League Cup tie on 10 September 2002.
Palace boss Iain Dowie immediately responded by bringing on a second striker, Dougie Freedman, for Routledge.
But Pompey looked to have found their second wind, as Berger flashed a free-kick narrowly wide with Kiraly seemingly beaten, and Fuller rattled the post as Zajec's men looked to wrap up the points.
At the other end, Hislop made a point-blank save from Joonas Kolkka as Palace's misery continued.
As the game petered out, Portsmouth's Andy Griffin picked up a yellow card for a late tackle on Kolkka in an otherwise fairly good-tempered game.
Crystal Palace: Kiraly, Butterfield, Sorondo, Hall, Granville, Routledge (Freedman 70), Riihilahti (Andrews 84), Watson (Soares 63), Hughes, Kolkka, Johnson.
Subs Not Used: Speroni, Popovic.
Portsmouth: Hislop, Griffin, De Zeeuw, Primus, Taylor, Mezague (Kamara 56), Stone, Faye, Quashie, Berger, Yakubu (Fuller 56).
Subs Not Used: Berkovic, Cisse, Ashdown.
Booked: Fuller, Griffin.
Goals: Primus 69.
Ref: N Barry (N Lincolnshire).