Preston failed to seal their place in the play-offs after Peter Sweeney and Barry Hayles netted for the Lions.
The visitors needed a win to ensure a guaranteed top-six berth but were left requiring two points from their final two fixtures - against fellow promotion hopefuls Derby and Wigan.
Millwall have just pride to play for but looked determined to not let their season end with a whimper and were ahead after nine minutes through Sweeney.
But David Nugent equalised just before the hour mark with a brilliantly taken strike, from Richard Cresswell's cross - only for Hayles to score with 14 minutes remaining.
Millwall keeper Andy Marshall was rushed to hospital midway through the first half after he was left unconscious following a collision with Cresswell.
Marshall received treatment on the pitch for a full seven minutes, before being taken to King's College Hospital in nearby Dulwich.
It was after Sweeney scored his second of the season when Jody Morris put the ball through for the midfielder to beat his marker and blast home from eight yards.
And Hayles could have added a second for the Lions when visiting keeper Carlo Nash spilled the ball into the striker's path.
Hayles should have buried it with his first touch, but he instead opted to line up his shot and Nash saved with a dive to his right.
But he made up for his blunder in the 77th minute when he finished off a one-two with Danny Dichio to fire home from 15 yards out to beat Nash with a low shot.
Preston rarely threatened in the first half and could only manage one shot on target, from Cresswell. Matthew Hill went close in first-half injury time with a curling shot from outside the box which flew just wide of the far post.
The match took a bad-tempered turn towards the end of the first half, with Millwall's Aussie defender Kevin Muscat lucky to stay on the pitch following a series of rash challenges.