Doing this is dangerous, as you don't take the retrieved value, but the possibly updated one. Besides that, _data is copied from _original when the record is loaded, so I don't see how 'id' can be missing from it?
Your second problem seems related to the first.
You don't have some classes overloaded by any chance?
You might also want to try develop, it has a log of bug fixes, it might be an issue already solved.
You're making a large leap in versions, I can't comment on what the code does.
I've never seen an ORM object with fields mssing, unless select() is used (which should be avoided), and in that case it should be missing from both _data and _original.
Difficult to comment without knowing exactly what you do.
You need to debug your code, and see what goes wrong and fix any compatibility issues when upgrading the framework. Changing the framework to adapt to your (now) incorrect code is the wrong way around.