This issue happens when Sequencer loops a dynamic montage. FAnimMontageInstance::ForcedNextFromPosition is set to 0 and ForcedNextToPosition is effectively the delta time. However, FMontageSubStepper::Advance only ever uses ForcedNextToPosition not ForcedNextFromPosition. This means that in FAnimMontageInstance::Advance, PreviousSubStepPosition always uses the position from the previous tick of the montage, not ForcedNextFromPosition. Therefore when we loop a dynamic montage, we end up with a PreviousSubStepPosition at the end of the animation, and Position at the start of the animation.
Various functions in Montages, like FAnimMontageInstance::HandleEvents assume that when Position < PreviousSubStepPosition that we're playing the animation backwards. Hence we sample all the notifies on the animation when looping. The same is true when sampling root motion.