The visitors took a shock lead in the seventh minute. A corner from the right was whipped over by Luke Garbutt and Marcus Bean stooped low to head home off the left-hand post.
But the lead lasted less than two minutes. Almost from the re-start Rotherham broke down the left and Ben Pringle swung over a cross which deceived central defender Cian Bolger and Matt Tubbs controlled on his chest before firing past goalkeeper Sam Walker.
The Millers took 13 more minutes to go in front. Kari Arnason's long throw-in caused panic in the Colchester defence and after Lee Frecklington's shot was blocked, Kieran Agard fired the loose ball home through the crowd.
Colchester should have levelled early in the second half when Garbutt burst through but, with only the keeper to beat, he shot wide. At the other end, a smart save by Walker denied Tubbs a second goal on the hour mark.
But Lee grabbed an equaliser with a headed goal in the fifth minute of injury time - the assistant referee controversially ruling his header had crossed the line.