uiaxes() with 'position' places according to the inner position property, not according to the outer position property.
If you set the second axes Visible property on, the labels will appear, and it will be obvious that the blank space is exactly where the labels would be, in the area between the inner position and the outer position.
Traditional axes are not exactly the same. With traditional axes, when you turn the axes visibility off, the layout routine is re-run and the visible area expands to (closer to) the outer position. You would get overlap because your position overlap, but it would be clearly defined and obvious as to what had happened.
(If you do the experiment with traditional axes() remember to set the Units to Pixels as the default is normalized.)