God I have so much work to do now DX I did contemplate about the whole changing the Tilemap graphics thing before, but I don't remember why I never did it. It should be a simple matter of setting @first_update to true again.
I think I understand the whole screen shaking problem, and it's mainly because the default algorithm of handling it is definitely NOT what I would have done. I should also mention that in your tremble you are subtracting @shake_duration by 1 twice; this was making my Tilemap problem more obvious (for some reason).
There happens to be a desync with autotiles updating and the ground layer's X coordinate. If at the left side of the map, the ground layer starts at X = 0. After shaking, it was somehow ending up at X = -32. I need to rethink my Tilemap#ox= method.
EDIT: I can achieve what I want if we change the viewport's x rather than its ox. I think Spriteset_Map and Spriteset_Battle are the only ones to use Viewport#ox= in the default scripts, and specifically only for shaking.
With default RMXP on a 20x15 map, the tilemap wraps around on both sides, which you can clearly see if you put two different tiles along the edges of the map. Same goes for the panorama. If I can draw some high z-value black rectangles when only along the map edges, then I can continue working around Tilemap#ox. Though this will affect some scripts negatively, specifically map wrap scripts.
I can really go a bunch of different ways with this.