Milliseconds isn't the Issue, it's ticks precision.
For instance if you create a new date:
var date1 = DateTime.Now; // date1.Ticks = 634165352561329529
and then you serialize / deserialize it back into a date, then you get:
// date2.Ticks = 634165352561320000
basically the 10000's are being lost from ticks precision.
so date1 != date2 // because the Equals override on DateTime uses Ticks.
I just ran into this problem on a unit test.