Danny Senda will remember his trip to Wiltshire after a series of incidents.
Senda scored his first goal of the season in his 44th appearance, missed a good chance to put Millwall in front again and was then carried off on a stretcher.
Senda put Millwall ahead with a textbook far-post header after finding himself unmarked when meeting a free kick from Ahmet Brkovic.
But Swindon fought back to level in the 31st minute when Paul Robinson brought down Michael Timlin on the edge of the area to concede a penalty.
Simon Cox stepped up to score with the spot-kick, sending former Swindon goalkeeper Rhys Evans the wrong way.
Timlin should have scored with a header from eight yards and a shot from Billy Paynter was cleared off the line by Marcus Bignot.
Senda entered the action again in the 44th minute and blazed wide from ten yards when another piece of skill by Brkovic left him clear.
But then in the last minute of the first half he appeared to fall awkwardly while contesting a corner and was carried off to be replaced by veteran Richard Shaw.
Anthony McNamee won the match for Swindon in the 51st minute with a left-foot shot which was deflected inside a post by the luckless Shaw.
It might have been worse for Millwall on their way to their 22nd league defeat of the season, but Evans made an excellent reflex save to keep out a shot on the turn by Paynter.
Towards the end, Millwall began to rally and had the chances to equalise.
In the 83rd minute, Neil Harris had the chance of a free header from eight yards but Petr Brezovan clung on superbly.
Then in injury time, Jay Simpson should have levelled but his low right-foot shot went across the face of the goal when an equaliser looked certain.