"he miner fetches the transactions from the pool and thus fills the work pool locally on the miner.",..

?
I thought the pool created the current block header using transactions from the MemPool, not the miner... I thought the miner only spun through the hashing for the current unique black header/nonce/extra nonce range given to them by the pool ?
In practice, miners & mining pools aren't actually building blocks & they never touch the mempool nor build/verify any transaction besides the coinbase - bitcoind handles all that. Handling Fees, signatures, etc is the job of bitcoind. By the time the pool process received the getblocktemplate() response - the block is already built & verified - besides the coinbase.
What pools do is keep track of miner stats, handle their networking & if a share reaches the target - tell bitcoind about it, which is done via the stratum protocol, which bitcoind has 0 idea about & is much more resource intensive than block verification/construction.