In order to guarantee fair balancing, the balancer tries to move one-chunk-per-collection-per-round. However, if when the balancer tries to load information on a newly-sharded collection it doesn't know about, an exception is thrown that aborts the round (Balancer::_moveChunks() calls getChunkManager(), which throws).
Solution is to use getChunkManagerIfExists(), which does not throw, and pass in reload=true to make the Balancer load the ChunkManager even if the collection is idle.