Is there a way to maintain ownership of a private key even when you intend to reveal it to someone else?
Yes, it is called "Proof of Work". For example:
https://mempool.space/testnet4/address/tb1qzsjnew5qcn75e4cqdsc6r9v8fjy5ensancqmv2l2n82p0q5f5tls758l9dThen, even if everyone knows the private key, and even if it is always revealed, the destination is still protected by the Proof of Work. Which means, that everyone else would also need to repeat the signature grinding, to move those coins somewhere else, and to create any kind of double spend.
Also, this is the reason, why miners' coins are safe in the first place. They create a coinbase transaction, where they "reserve" some funds. And then, they broadcast the whole block to the whole network. But: for the next 100 blocks, nobody can touch those coins, as they have to reach maturity, and be confirmed by other miners (you can use OP_CHECKLOCKTIMEVERIFY or OP_CHECKSEQUENCEVERIFY, if you need it).
in the event of a private key collision, where two different users independently generate the same private key and sign messages with it in the same block, wouldn’t that create a conflict?
This was solved in the past by first-seen-safe rule, and now is handled by full-RBF. Currently, blocks are always handled as first-seen-safe (so you need to create at least two blocks, to reorg a single block), while transactions are just included, based on their fees (the highest fee is confirmed, everything else should stay unconfirmed).
what if ownership was demonstrated by allocating a minimal amount of Bitcoin (e.g., 1 satoshi) to the address derived from the private key?
Then, you can have more than one transaction in the same block, sending coins to the same address. And even if you consider the first occurrence, then still, it doesn't mean, that it was the earliest attempt. The only bulletproof solution is Proof of Work, where hashrate majority decides, what happened first. And if you need that kind of protection, then you can just require a signature, below a given size, which will force your users to grind it (and the biggest hashrate will win).
Also, you don't have to put everything on-chain, you can just commit a batched version every sometimes. Because sending one satoshi is below the dust limit, and you will quickly run out of coins, if you would try to launch all of that on mainnet. I guess the best way is to try it on some testnet first.