Take the example where you are just editing a Time and the text of the control is set to "12:00:00 PM". At this point, the DateTime and the text are the same. If you edit the '12' portion by typing '8', no OnChange event occurs, and furthermore, if you try to evaluate the DateTime property at this point it will still be the value for '12:00:00 PM' (e.g. Use a TSpeedButton to evaluate the property since it doesn't make the DateTimePicker lose focus). If you were to type '08' instead, things would be fine. Also, if you were to use the arrow keys to select the minutes part, or tab out of the control, things would be fine. It's just the one case I mentioned above that doesn't work like I would expect.
In order to solve this for my needs, I just did a DateTimePicker1.Perform(WM_KILLFOCUS, 0, 0) before evaluating the DateTime property. Since the control was on a popup window that was going away anyway, any side-effects of doing this won't really apply.
Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.