There were! It wasn't properly hiding the dummy object when changing rooms.
Do you know what happened to be a reason?
I'm comparing original code and your version, and don't see much difference tbh, rather than for initial object position. Everything else is mostly GetViewport* functions replaced with Camera counterparts.
I'm asking because in theory I'd like to keep AGS 3.5.* backwards compatible as much as possible.
One thing that I might mention, you create new camera every time a room is loaded, but that camera is never deleted.
Custom Viewports and Cameras are bit special in a way that they are not automatically deleted even when the pointer variable is gone. You have to actually call .Delete() for it.
(All created cameras are stored in Game.Cameras[] array)
this.shadowsCanvas = DynamicSprite.Create(cam.Width, Room.Height-this.oShadows.Y);
Probably you could just use Game.Camera.Width instead here.