Nodes create a pool of hashes and select the smallest one just like in proof of work, but it doesn't necessarily have to start with zeros.
If it will be "the smallest one", then it will "necessarily have to start with zeros", just because that's how "less than" operator works.
If network produces two valid blocks the right chain is the smallest proof.
In Bitcoin, it is different. We have something called "chainwork". Where there are two valid blocks on the same height, both are treated as valid, and nodes are waiting for next blocks to resolve that. If there is a disagreement, then the total work is counted, and the heaviest chain is picked, not the heaviest block. So, if you have only one different block in both chains, and the difficulty is the same, then the chainwork will be identical in Bitcoin.
So, in Bitcoin, the block could have smaller proof than needed, but it will be counted according to the difficulty. For example, the Genesis Block has a lot of work, but still is counted as a block with difficulty one, no matter how small that hash is.
The hash is called "ticket" and consist of HashPrevBlock, PubKey, Signature.
We have the hash as SHA-256(SHA-256(blockHeader)), there is no need to change that. By hashing the whole 80-byte block header, you have all needed things, including the merkle tree, so you can attach any SPV-proof for any kind of coinbase output, including PubKey, Signature, multisig, Taproot, or any future-address-type, or even any custom script. There is no need to use PubKey and Signature in some fixed format, because then upgrading that model will be harder, when you will want to upgrade your address type for any reason.
This way it is easy to verify the amount of coins.
What about verifying the amount of coins, where the basic block reward is equal to zero? Then you need to check all transactions. For every "ticket". And every block can contain different transactions, because miners could include any custom transactions in their blocks.
However by simply having more coins you are removing tickets from other possible validators.
Then it is simply Proof of Stake: by having 51% of coin supply, you can control it forever. And it is not that hard in times, where there are huge exchanges that accumulate a lot of coins from many users. It is much harder to control 51% of hashing power, just because you have to maintain the whole equipment. But when it comes to having coins, then you only need to run some kind of exchange. And for altcoins it is even easier to get 51%, than it is for Bitcoin, especially if you can be involved at the beginning.
Using the bitcoin example, it is only possible to have 420000 tickets.
Bitcoin will not have exactly 21 million coins. It will be less than that, because halvings will end, and because some coins were burned or lost.
As it is not possible to predict the signatures so it is not possible to predict the winner in advance.
For a given public key, if you use deterministic signatures, where R-value is well-defined, then the signature will be predictable. Hashes are unpredictable, but signatures could be perfectly predictable, if they are constructed in a deterministic way. And now, Bitcoin Core use deterministic signatures by default.
Ethereum's implementation is very complex.
On the other hand, your implementation is not well-defined, for example you use simple text data, instead of binary format (so under different encodings it will hash into different values), and you define coin amounts as strings.