Compatibility Update
It turns out that the MouseEvent buttons property is not supported in all browsers (eg, Safari), so my original test for the left button (event.buttons & 0x1) was not sufficient.
I now rely on my own internal colStart and rowStart properties, which are "set" after a mousedown event and "clear" after a mouseup event.
Also, unlike iOS devices, Android devices don't return any position data on the touchend event, so the selection code must now rely exclusively on the last known position from either the preceding touchstart or touchmove event.