In 4.22, we now periodically compact the Object Hashes in packaged builds to save on memory. In the editor, the Actor Iterator uses the levels list which is quite stable, but in a cooked build i uses the object hashes which is very unstable. After discussing this, we have determined that this is working as designed, and BeginPlay order should not be assumed to be stable.
Using Game Mode instead of Game Mode Base causes the Begin Play event to trigger in a different order. This is shown in the reproduction with the Begin Play of the Player Controller and the Game Mode. When using Game Mode Base, the Game Mode Base's Begin Play is fired first. When using Game Mode, the Player Controller's Begin Play is fired first.
This did not occur in 4.21
This was tested in and does occur in 4.22, 4.22.1, and Dev-Main CL#6105541
There's no existing public thread on this issue, so head over toAnswerHub just mention UE-73371 in the post.