Just pasting my comment in the answer in case it may help someone else, it struck me as strange that there was a hold on before a nexttile but I didn't think twice about it, and really it causes some major confusion!
It took me a while but I think I see where your confusing results are coming from:
Short version: call nexttile before calling hold on, I suspect this will solve your issues.
Long version (this is a lot of explanation about a particularly unfortunate corner you landed in):
The first line, tiledlayout(length(siteindexes),2), creates a new TiledChartLayout with a specific size (two columns).
The third line, hold on, just sets the hold state. It seems pretty harmless. But here's a thing to know about MATLAB: for lot's of commands, if you don't specify a "target", MATLAB will pick one for you. Here, hold on, is equivalent to hold(gca, 'on'). gca is a magical command - it find the current axes, and if one doesn't exist, it creates one.
So after hold on runs now there's an axes, and it's not parented to the layout, it's just sort of in the same figure.
On your next line you call nexttile. nexttile has a simlar pattern to hold in this case - if you don't give it a target (which TiledChartLayout it should go into) it just picks one. And if it doesn't find a layout it will create one (and it defaults to creating one with the flow layout).
nexttile's method for picking a layout is pretty straightforward but not documented. In this case, it saw a current axes (gca) and saw that this axes wasn't in a layout, and so decided you must want a new layout. Creating the new layout in turn wiped out the axes (layouts erase things behind them).
Whew! Very particular and confusing result of calling hold on a bit early!
When you got down to plotting, sometimes your plots were arranged as expected, sometimes not. That's because the flow layout is the default when nexttile causes a new layout to be created, and because flow layout automatically picks the number of rows and columns.