Interesting... I looked into this. You enable the game objects, then you do your repositioning logic. The first time you do it, OnEnable doesn't do much because the widget's Start() hasn't been executed yet. The second time it has been, so it runs through the validation code and does the label text processing. Problem is, since this happens in OnEnable, it's done before your repositioning code runs.
Change your code to not ignore disabled objects, and it works fine. Comment out "OnValidate()" call in UIRect.OnEnable, and it also works fine. I'll do the 2nd on my end and see what side effects I get from this.