Do pool servers communicate with bitcoind, and in what capacity? I'm trying to understand how the whole process flows. Here's how I currently understand it working.


  Mining client -> Pool server -> Bitcoind
  
  getwork:
  
  
  Mining client calls getwork from Pool server, and it in turn calls getwork (or something else?) from Bitcoind. 
  
  
  stratum:
  
  
  Mining client ingages the Pool server using the stratum protocol, and the Pool server calls getwork (or something else?) from
  Bitcoind.
  
  
  getblocktemplate:
  
  
  Mining client calls getblocktemplate, and the Pool server calls getblocktemplate from Bitcoind.
  


And I understand that the pool server does more than just relay information, but I wanted to keep it simple. I just want to get a grasp of how it all flows together, and what calls it makes.

Any help is greatly appreciated!
getwork is for all intents, completely deprecated due to it's inefficiency. At this point a single ASIC device can completely swamp a bitcoind with requests as they're able to exhaust the 32bit nonce in a fraction of a second. The situation is severe enough that pools like BTC Guild have extraordinary large (6%+) fees on clients using getwork in order to get them to switch to more efficient methods. 

Internally, pools like Eloipool use getblocktemplate to generate work for the clients, and then use stratum or getblocktemplate to communicate with the workers depending on the request type they make. getwork is not involved at any stage. In fact, it's currently pegged for complete removal at some point.