When RemoveExistingProducts is sequenced in the InstallInitialize area you effectively get an uninstall of the old product followed by an install of the new product. All other things being equal, this means that file versions and Component guids are irrelevant.
When sequenced in the InstallFinalize area the install of the new product happens over the old product, so file versioning rules apply to each file being installed. Component guids also matter because RemoveExistingProducts uses ref counting to decide whether to remove the old files or just decrement the reference count. The components in the new install (files and registry items) are effectively being shared with those in the new product, so it's important to follow component rules.
If you want an upgrade to behave as if the user uninstalled the old product then installed the new one, then sequence RemoveExistingProducts in the InstallInitialize area.