ClusteredSession includes logic to skip replicating session metadata if the only thing changed is the timestamp. This is driven by the ClusteredSession.maxUnreplicatedFactor property, which represents the percentage of the session's maxInactiveInterval the metadata should be allowed to go unreplicated.
The default value for this property (80) is far too high. It basically means a session's timestamp will go unreplicated for 80% of its lifespan. If no request comes in during the remaining 20%, and then a failover occurs, the failover server will see a timestamp for the session that is older than the expiration time, and the session will be invalidated.
This problem does not exist in AS 5, which replicates the timestamp independently from other metadata, sending it at least once per minute.