I hit the same problem too. I have a project that is more or less standalone(in that I need to be able to produce standalone builds with its content) but its content has to be accessible from a Launcher project where a menu can open multiple such projects and load them all from bundles, which is where I hit this issue and I only get the catalog and hash in the Launcher project while the bundles themselves remain the sub project’s Library folder.
To do so, you have a Profile where the Remote points where you want, by any means (url, absolute path, relative whatever). In Addressable Asset Settings (Addressables Window-> Tools → Inspect System Settings), you set that profile in the Profile To Use so the rest of the settings within this scriptable (and more*) can reference those build/load pairs.
To load the bundles, you also need a catalog, so Build Remote Catalog needs to be checked and its Build/Load pair should be the Remote one. This handles putting the hash and catalog json in the remote path.
Then in Update Previous Build section, you set Content State Build Path to the same remote pair so that the content state bin is also present (this is optional, but you don’t have to always set the .bin file manually when performing Update Previous Build and I can remove it from build in the Launcher project).
(*) So far we’ve covered everything, but the bundles themselves. Each group defined for Addressables has its own settings scriptable under Assets/AddressableAssetsData/AssetGroup, namely AddressableAssetGroup file. At first they probably have no override and basically reference top level settings, so they default to Local paths for build from the same profile we set before (which I initially had completely ignored). One solution is to add the same Local.BuildPath as the Remote. Another in case you want more fine grained control is to add the Content Packing & Loading Schema in each group’s AddressableAssetGroup scriptable. There you can configure more things for each group including how to compress etc. I had added these schemas trying to figure out things like setting bundle names to just a filename without hashes and guids. At the top of the schema you can specify the Build&Load pair for this particular group (e.g. DefaultLocalGroup is local, but each other bundle is a dlc and therefore uses Remote). This setting is what governs where the .bundles go.
If you forgo the AddressableAssetGroup override schema, the Local pair should control the bundle location. If even that doesn’t work, the it’s probably a bug.
UPDATE: Looking at the Basic/SceneLoading project that the OP mentioned, unless they messed wtih the Local paths as well, the AddressableAssetGroup for the DefaultLocalGroup has a custom pair in the schema override which uses the local build and local load paths. So no matter what one did in the Remote paths, the .bundle would always be in the Library and copied over if you build a player, but the catalog, hash and state bin could very well be in Remote.