I happen to have found a workaround that seems to be working great for Chrome so far. Instead of using transformOrigin on the stage's style, I am now instead setting the initial size of Crafty's stage to the full size I wanted it to be scaled to, then zooming the viewport.
So the Crafty stage size is set like this now:
var GAMEWIDTH = 480, GAMEHEIGHT = 320;
instead of 240 x 160 like it was before, and after my main game scene is loaded, I run this:
Crafty.viewport.zoom(2, 0, 0, 0);
This ends up blowing everything up to double the size like I wanted, and strangely enough Chrome decides to behave when I do it this way. And when I make the mobile version, I'll just calculate what the stage size and viewport zoom amount should be based on the window display size.
IE10 is still smoothing everything, but I remember reading somewhere that Microsoft added support for imageSmoothingEnabled in IE11, so I should probably try updating IE and seeing if that version starts working right in my game.
For now, I'm pretty happy that I have my game displaying the way I want it to in both Firefox and Chrome, though.