Reading sub Adam Le Fondre stepped off the bench to grab a 76th-minute winner as Brian McDermott's high-flying Royals pulled off a classic smash and grab raid at The Den.
Andy Keogh had fired the struggling Lions ahead after 14 minutes with a composed finish from Harry Kane's flick, only for Hal Robson-Kanu's volley in first-half injury-time to haul the visitors level.
Millwall were more than a match for the promotion-chasing Royals, but a moment of indecision by keeper David Forde proved costly with 16 minutes remaining.
Mikele Leigertwood's long ball over the top caught the home rearguard napping and although Le Fondre was clearly offside, Jason Roberts wasn't. Keeper Forde might have raced out to clear but decided to cover his goal enabling Roberts to pick out Le Fondre at the far post, and he swept home from close range.
"We restricted them to not many chances but they were poor goals to give away," said Kenny Jackett. "We knew it was a game where you had to grind out a result, and in a tight game they are especially poor."
It was a cruel blow for Jackett's side, who have now failed to win in the league at home since Boxing Day against Portsmouth, seven games ago.
The afternoon was one of total frustration, with the timewasting tactics of Reading merely adding to the angst amongst The Den faithful.
James Henry was more sinned against than sinning when, following a raking challenge by Ian Harte, the Lions winger was booked for protesting to referee Chris Sargeson whilst Harte escaped punishment of any sort, as did Noel Hunt who, having stumbled over, then held on to the ball on the halfway line to prevent Keogh breaking forward.
As expected, Lions boss Jackett named an unchanged side from the team that started against Burnley, with the only changes coming on the bench where Darren Ward and Ryan Mason were named at the expense of Scott Barron and injured former Royal Darius Henderson.
It was another former Reading man Henry who had a couple of half-chances early on, whilst Lions skipper Paul Robinson made a crucial defensive block to avert the danger as Roberts prepared to shoot, although the referee awarded a goal kick and not a corner.
The opening period was fairly scrappy, but it was Millwall who got their noses in front on the quarter hour courtesy of Keogh's third goal in four games, a crisp low shot beyond the reach of visiting keeper Adam Federici.
Leigertwood's 25-yard effort sailed way over, while Keogh came within inches of connecting with Henry's cross as The Lions pressed forward.
Hamer Bouazza's deep delivery nearly deceived Federici, who collected at the second attempt with Kane ready to pounce.
Henry fired narrowly off target from a free-kick and Harte did the same at the other end before Reading hauled themselves level deep into first-half injury-time.
Bouazza's attempted clearance crashed off the back of Tony Craig for the visitors' sixth corner of the half. Although Forde got a hand to punch Harte's corner, the ball fell into the path of Robson-Kanu, whose well-struck volley from inside the area flew into the top corner.
The second-half produced few clear scoring chances, with both teams largely restricted to trying their luck from distance.
Bouazza placed a 55th-minute free-kick harmlessly over, Henry dragged a low shot off target and then Kane came within inches of applying a touch to another Henry free-kick into the penalty area.
Reading looked anything but a team challenging for automatic promotion, and there was more than a hint of controversy about their second goal.
If there had been a stroke of luck leading up to their leveller, Reading's second was equally fortuitous.
Le Fondre initially paused when Leigertwood's forward punt was put through to him because he was clearly offside. However, no flag was raised and Roberts went for the ball instead before crossing to Le Fondre, who slotted home from five yards.
Manager Jackett threw on Dany N'Guessan and then Ryan Mason in a bid to grab a late leveller.
N'Guessan's neat touch saw Keogh fire an 87th minute drive narrowly wide and then Craig planted a header straight at Federici from Wright's free-kick with the last real chance of the game.
Millwall: Forde, Dunne, Craig, Abdou, Robinson, Lowry, Bouazza (Feeney, 71mins), Wright, Keogh, Kane (N'Guessan, 78mins), Henry (Mason, 82mins). Subs not used: Allsop, Ward.
Booking: Henry (31mins)
Scorer: Keogh (15mins)
Reading: Federici, Connolly (Tabb, 46mins|), Karacan, Pearce, Leigertwood, Hunt (Le Fondre, 63mins), McAnuff, Gorkss, Robson-Kanu, Harte, Roberts. Subs not used: Church, Anderson, Cywka.
Booking: Pearce (54mins)
Scorers: Robson-Kanu (45+3mins), Le Fondre (76mins)
Ref: C. Sarginson
Att: 11,271 (away 1,489)