@shaoboyan and I were discussing this, and we realized it's unspecified which corner of an external image is the origin (0,0) when doing a copyExternalImageToTexture operation. This is ambiguous in particular because inside WebGL, the origin of the canvas is the bottom-left.
I'm strongly inclined to say it is (at least by default) the top-left corner of the source image/canvas. However we could have an exception for WebGL that puts it at the bottom-left to match WebGL's own coordinate space.
Should we make it configurable? Prior art does so - though primarily due to the fact that WebGL is inverted relative to everything else.