How can CORS possibly be related to image pixels in any way?
I don't think this requires a 1000x slowdown but I'm not super familiar with this area of the spec. It should be possible to cache the tainted state of the canvas in a single bit, only updating it when adding new images to the canvas, and checking the bit when converting the canvas to an array.
How? There's no concept of a tainted WebGL canvas because it just can't load textures without CORS.