FQuat::NetSerialize will always call Normalize() as part of replicating the current value, so that only the X, Y, and Z components need to be serialized (the W can be computed on load). This operates on the current value, but due to floating point error the result can be slightly different, even if the original FQuat was already normalized. This will cause the FQuat to be considered dirty the next time the property is evaluated for replication, normalizing the value again. This process can continue indefinitely.