If I were to insert multiple (valid) author keys over RPC, how does a collator or validator choose which key to sign with when producing a block? As far as I know this cannot be set on start-up.
This is what
session.set_keys achieves, it declares that an on-chain account (presumably with keys in some form of cold storage) will sign blocks/consensus messages with some other key. When a node starts, it checks the chain state to see if any private keys in its keystore match the public keys that are registered on-chain. If it has the keys, then it will sign the corresponding messages with them.