in the “wrong version”, you are not specifying that self.my_submodule has to be deep copied. You are just adding additional references to it via self.add_module. So it is doing what you asked for.
Maybe in the wrong version what you want is:
self.add_module('submodule_' + str(level),self.my_submodule.clone())