Based on my past experience which doesn't accept incoming connection, 300MB mempool isn't the problem. The problem is rate of received unconfirmed transaction could be slow (less than 20 TX/s), which is problematic when there are so many unconfirmed transaction. For example,
https://mempool.space/ currently state there are about 177K TX with 759MB mempool (about 70K with 300MB mempool). I haven't checked whether it's also happen with newest version of Bitcoin or if you accept incoming connection.
It depends on how well-connected, or how loose your peer's mempool policies are. Johoe and Mempool.space are very well-connected and are likely to have transactions that would otherwise be purged from the reference nodes with default settings.
Other than that, Bitcoin Core uses inv messages to notify their peers of the blocks and the transactions that they have. For which, each node will subsequently request for the transactions that they're not aware of using getdata. I'm not exactly sure what is the exact limit, I don't recall exactly seeing a limit for that. Mempool.space and others are displaying the new transactions that are being relayed, as opposed to ones that are offline for too long.
Regardless, by how Bitcoin Core estimates fees, you don't actually have to know the entire mempool to get a good estimate. This is further compounded by the fact that you're only looking at the higher quantiles, which is pretty much guaranteed by the minfees limit set by mempool.