I just found that that order of the result will change if a child has an Animator component on it. GameObject.getComponentsInChildren(this.gameObject, Camera);
All children are inactive but the first (top in hierarchy) and they all get collected in that order, until I add an Animator component to the last one, which then comes first in the result.
i got the same problem, but no animator was involved, apparently it gets the order the children where created instead of the order in the hierarchy, my solution was to use a public objec3d array and manually set them in the inspector that way the order was respected