When I try it with the “networks” section from above in dfx.json then I get the error “Caller is not allowed to call ic00 method provisional_create_canister_with_cycles” which indicates that it is handling the network as a local one. So either synthetic testnets are not meant to be on mainnet or it is a bug and dfx ignores the "type": "persistent" part.
Outdated docs. If you use icp0.io instead of ic0.app it works. dfx currently only accepts icp0.io as a provider to detect mainnet.
The persistent part determines where the canister ids are stored. For ephemeral, they go in .dfx/<network>/... and for persistent they end up in canister_ids.json, so they are under source control so that you can have fixed staging canisters