RenderMathMLOperator::layout() deletes and creates renderers. Layout time is not the right time to do this. One serious side effect of this is that preferred logical width computation is completely wrong.
Only at layout time do we know the operator height. Glyph stacking is relative to the row height calculated when the row's contents are laid out. This is then essential for the layout of rows that contain rows with operators that are to be stretched.
I'm certainly open to suggestions as to when this should happen but the information necessary to stretch the operator is ascertained during the layout of the containing row and so it always happens at layout().
You should look at the RenderMathMLRow to see when the operator stretch height is calculated.
*** This bug has been marked as a duplicate of bug 122361 ***