Do miners keep a "balance" of how much each public key has? I am trying to understand how double spending can be prevented if mining nodes do not keep a current "balance" of BTC associated with an account?

If they do keep the current balance isn't this a problem as the number of potential accounts is very, very large? That is, if each account balance takes up space in memory, and more accounts are created then the only way nodes can keep up is when the rate of growth of accounts is less than the rate of growth of available memory per node?

Am I missing something?
The notion of accounts is for human convenience. The system doesn't care that you think of all the coins accessible by the same private key as a single account.

Instead, miners keep an efficiently organized database of all UTXOs (unspent transaction outputs). When a miner validates a transaction, it checks that each input corresponds to a valid UTXO.

There's no need to keep the UTXO database in memory. Storing it on disk is fine as long as it is efficiently indexed. Since it's kept for precisely for this purpose, it is efficiently indexed for this purpose.