[I have set our tile size to 64x64 which is obviously silly for production use, but increases the frequency of problems being observed.]
There seems to be a problem in _initTiles in Grid.js, in that it only seems to expand the tile grid as required, rather than trimming it to the required size. There seem to be a number of side effects of this:
Changing the window size leaves lots of tiles below and to the right of the active tiles (panning with the column/row shifts disabled produced 'outside_box_not_cleared.jpg' (attached).
It also seems possible to get the grid into a non-rectangular shape by starting with a very thin vertical window, then resizing to very thin horizontal window. After scrolling, the rows being shifted in had too few columns, and produced 'inverted_L_box.jpg'.
The third more subtle problem is that when zooming in, the number of tiles required to achieve coverage at a particular resolution was changing (in my tests, from 17x26, then 16x25, then 17x26). As it zooms in to the smaller size, it leaves a row and column from the old grid, and when panning the shiftColumn/Row code looks into those tiles to try to place shifted tiles adjacent to them, and gets very confused with the data from the previous zoom level.
[Maybe related to #357]