ついに解決しました!
@pfaffman
bootstrap は launcher を更新しません。また、launcher は古いベースイメージをピン留めしている可能性があります。
git pullによってそのピン留めが更新されるため、次の bootstrap では新しいイメージが使用されます。(通常、rebuild は自動的に pull します。)
つまり、これが git pull が時折必要になる理由です - bootstrap プロセスは launcher を更新しないためです!
bootstrap と recreate を繰り返すだけでは、このループから抜け出せません。
rebuild と揃えるべきではないでしょうか?