I traced the issue down to the canvas context, this bit:
if(typeof img.naturalWidth != "undefined" && img.naturalWidth === 0) {
Unfortunately, as per Mozilla Bug ID #700533 (funnily enough - opened 9 years ago, and still open...), Firefox returns a 0 on both naturalWidth and naturalHeight when using an SVG image.
As such, on Firefox and when using SVG, it's locked in a permanent "waiting for the image to load" loop. The image is, of course, loaded.
If I return true from there, everything else works as exepcted.