Вобщем, обнаружил ошибку в этих процедурах. Суть в том, что в них TDateTime приводится к QWord и записывается, а потом в виде QWord читается и переводится обратно в TDateTime.
А так как TDateTime - это Double, то процедуры работают некорректно - в смысле, что если записать, а потом прочитать, то на выходе будет совсем не то, что записали.
Можно ли как-нибудь сообщить об этой информации разработчикам fpc, чтобы исправили?