After looking at the implementation a bit more, there's a doneLoading flag on the tile that is used as an optimization to avoid checking the tileState against a list of possibilities, so we need to reset that flag to force the system to check the states again.
The easiest way to iterate the tiles is to use the replacement queue, which contains all loaded tiles, instead of trying to traverse down the quadtree of tiles. This will need to use some "private" fields, at least until we add better APIs for this.
Given the central body, and the Imagery object that you got from the cache earlier, do:
// assuming variables "centralBody" and "imagery" already defined
var tile = centralBody._surface._tileReplacementQueue.head;
while (typeof tile !== 'undefined') {
var tileImageryCollection = tile.imagery;
for (var i = 0, len =
tileImageryCollection.length; i < len; ++i) {
// we only need to reset the flag for Tile objects that overlap the
// Imagery object that we are updating, that is, tiles that have a
// TileImagery object that references the Imagery object.
if (tileImageryCollection[i].imagery === imagery) {
tile.doneLoading = false;
break;
}
}
tile = tile.replacementNext;
}
Let me know if that works for you. The inner for loop and if check is an optimization, if you have trouble, try taking it out, and just setting every tile.doneLoading to false.
Scott