So I have solved this, finally!
@pfaffman
bootstrap doesn’t update launcher, and a launcher may pin an old base image.
git pullupdates that pin so the next bootstrap uses the newer image. (rebuild normally pulls automatically.)
So there you have it - this is why git pull is sometimes necessary - bootstrap process does not update launcher!
If all you do is bootstrap and recreate you will never get out of this loop.
I wonder if this should be brought in line with rebuild?