Kenny Jackett's team took the lead against his former club in the 23rd minute following a corner, with the ball sailing through a sea of bodies before falling kindly for Danny Batth, who hit home at the far post.
The home supporters appealed for a penalty when Gregory tumbled in the area shortly before half time, but the referee waved away Millwall's protests and the Lions went into the break with nothing to show for their efforts.
Ian Holloway's side fought hard for an equaliser in the second period, and they came agonisingly close to one in the 51st minute when Gregory's cross was headed against the post by McDonald.
Wolves looked to have quashed their resistance just after the hour mark as James Henry's free kick came back off the upright and Ethan Ebanks-Landell was in the right position to tap home from close range.
Three minutes later it was 3-0 to the visitors, with the in-form Bakary Sako giving Wolves some breathing space by driving another free kick straight into the top corner to make it three goals in as many matches for him.
Millwall pulled one back in the 67th minute when Gregory chested the ball down in the box and rifled home, and substitute Ricardo Fuller added a second eight minutes before the final whistle.
It would get even better for the home faithful when, with just three minutes remaining, Fuller latched onto a through ball, turned, and fired beyond Ikeme to rescue an unlikely point for Millwall.
The match ended on a sour note for them as Shaun Williams was shown a red card for a professional foul for hacking down a Wolves runner, but the Millwall fans still celebrated this point as though it were three.