I tried rolling it back...didn't help me much, as you'll see...
I also looked into what Zones actually do and how they work, and it's pretty cool. It looked like they should be helping me in this case, especially with long-stack-trace-zone.js.
After I included the long stack trace support, it seemed I was actually getting *more* errors, and even less helpful stack traces...so I disabled them.
Somewhere along the line, I removed more debug and error logging and my app seemed to suddenly run without errors.
Anyways, I think I've finally tracked down what this particular error was coming from after it started popping up again, and it turns out that I was actually triggering the exceptions *in* my error handlers, simply by accessing error.stack!
In this particular browser, Error.prototype.stack is implemented as a property with native code get and set functions, rather than as a simple string. Problem is, calling the getter appears to consistently trigger a TypeError internally.
Back in zone.js, the global Error constructor is replaced with ZoneAwareError...and the constructor for ZoneAwareError starts with:
// Save original stack trace
error.originalStack = error.stack;
So, right away, that line throws a TypeError... I'm guessing this new TypeError is probably shadowing every error thrown within my Angular app, which is less than ideal.
Frankly, I'm surprised anything is working at all...I guess it must somehow fall back to the browser's native Error rather than recursing into ZoneAwareError. Not sure how that works...
At this point I'm just hoping to get some support from the hardware vendor. The SDK came with an NDA...which I haven't actually seen, but just to be safe, I'd rather not reveal who the vendor is at this point...