Besides Hierarchy, Layer/Sort, Parent/Child, and z-axis, is there anything else that controls rendering order?

I think I understand how Hierarchy (lowest sibling rendered last, appears on top), Layers (can assign to layers - which have their own order), Sort (sort of a sub-layer), Child (rendered in front of parent), and z-axis (higher numbers go in front) control how each object appears in front or behind other objects. But -consistently - I have a TextMeshPro object that ends up behind its parent sprite (a square). Adjusting all of the 4 parameters mentioned here has no effect on the render - the text remains behind the sprite. What am I missing?

Follow up: stranger still, the sprite seems to be acting opposite of my expectations: placing it early in the hierarchy makes it appear in front of other objects, whereas it appears behind a parent sprite if it is lower in the hierarchy!