Football League Player of the Year Rickie Lambert struck a hat-trick as Southampton fought back to stay top of the Championship table.
Lambert gave the visitors the lead from inside the box, but Millwall turned the game around with a quick double.
Jose Fonte was unfortunate to divert Andy Keogh's shot into his own net, before Paul Robinson's thumping strike put the hosts in front.
But Lambert scored from the spot twice in the last five minutes to win it.
It capped a perfect week for the 30-year-old, who was named the Football League's best player for the last 12 months at a ceremony in London, and took his tally to 28 league goals this season.
With Nigel Adkins's side picking up all three points, it held off Reading's challenge for top spot with the Royals winning nine of their last 10 matches.
When Lambert lashed home via the underside of the crossbar from Morgan Schneiderlin's cutback, it looked as though the league leaders were set for a routine victory.
But Millwall dug deep and equalised against the run of play as Keogh's effort struck the post before going in off Fonte.
The Lions went ahead as the Southampton defence failed to clear their lines from a corner and Robinson capitalised.
And the visitors could have gone further behind in the second half but Darius Henderson's header was cleared off the line by Frazer Richardson.
The hosts were within five minutes of a win that would have eased their relegation concerns, but Lambert was fouled in the box by goalscorer Robinson and the striker picked himself up to smash home the penalty.
Moments later, referee Fred Graham pointed to the spot again when Alan Dunne handled the ball, and Lambert completed the turnaround.
Millwall manager Kenny Jackett:
"I felt for them to get both decisions, was harsh on us. I haven't seen either one again, but to get both of those away from home is somewhat fortunate.
"It was a terrific performance, to come back from a goal down and not the brightest of starts.
"For us to get nothing out of that game is ultimately very frustrating.
"It's a massive game and we can't dwell on this now. Whether it was good, bad or indifferent, we can't be too disappointed that it affects the rest of our week."
Southampton boss Nigel Adkins:
"I still believed we would win with seven minutes to go. We've got goalscorers in the team, we were on the front foot and you've just got to believe a little bit.
"We knew before the game it was going to be very challenging, it's always a tough place to come to.
"I thought we started the game well, moved the ball around well and justifiably went in front. It was a super goal.
"The first one is a clear penalty, where Rickie is brought down, so there can be no qualms about that. Then the corner comes in, the referee is in a perfect position, with nobody blocking his view. Two players go up for the ball, one a Southampton player and two from Millwall. It looks from the video that either of them, more likely Dunne, handles the ball."