Why not make the block size simply depend on some fraction of mempool size...
Simply stated, there is no "the mempool". Every node has a mempool and every mempool is assumed to be different.
Of course every miner will set mempool size to a different value before mining the next block. That is why I said the mempool as miner (who will produce the next block) sees it. Once block is mined that value becomes the mempool size for blockchain at that block index.