Until now (including 2.83), deep copy of object datablocks was very confusing and partially broken code (mostly missing some remapping to duplicated IDs).
Recent refactor made internal code much more maintainable and consistent, but it did add some user-side changes in behaviors (documented in the release notes).
One of them is that linked Objects are no longer kept unchanged when fully copying a scene.
I can see three possibilities here:
- Keep new behavior, which matches all other deep-copying (of collections in particular).
- Always consider that we do not want to copy sub-data that is linked during a duplicate. That would also involve all other ID types, not only objects.
- Restore previous behavior (i.e. have an exception corner case handling reserved to only scene duplication).