I think it's because it still remembers the last offset value & by default on scene load it probably uses the actual objects position instead.
If the object is non-interactive & has no object polygon, then may I suggest creating the sprite as an animation & using Lua script to set the animation position instead as it will allow you to specify the exact coordinate to move / set the animation to instead of using an offset from the actual position.
Using that method, you could set a condition or even better a value, which can be used in an if query inside of an at begin of scene action to determine which position the animation should be set to at the beginning of the scene...
for instance a value of 0 could be the original position. 1 could be 300x500 or something etc. etc.
ActiveAnimations["bird"].AnimationCurrentPosition = {x = 0, y =0} -- instantly update animation position of "bird"
ActiveAnimations["bird"]:to(3000, { AnimationCurrentPosition = {x = 300, y = 500}, easeQuintOut) -- move "bird" to 300 by 500 over 3000ms with smooth ending