Das ist nicht seltsam, sondern liegt in der Natur der Sache begründet.
TDate ist ein
double und somit ein FloatingPoint-Type, und durch die systembedingten Ungenauigkeiten (nicht alle Werte können wirklich korrekt dargestellt werden) werden FloatingPoint-Werte immer auf Ähnlichkeit (mit einem Epsilon = maximale Abweichung) und nicht auf absolute Gleichheit geprüft.
CompareDate berücksichtigt dieses eben
Kaum macht man's richtig - schon funktioniert's

Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)