just quick look
int64 LatestBlockTime, shouldn't this be unsigned? do you store negative values in BlockTime?
I wonder if an attacker can start in the past move his way backwards in time until he appears in the future.
In principle, you are right. In practise it does not matter.
The origin of LatestBlockTime is from block timestamp which is unsigned 32 bit integer. Of course it would make sense to use unsigned integers, but BlockLastSolved->GetBlockTime() also returns signed 64 bit integer. Don't know why, maybe using signed has made some calculations easier and since the origin is 32 bit there is no problem.
I assume timestamp is Unix time?
So what happens after 06:28:15 UTC on Sun, 7 February 2106?
You will probably have fix it by then but lets say an attacker fast forward to this day and then wraps around 1970 to current day, are you safe?