The original commit for getblocktemplate was not much more than a rewrite of getmemorypool in terms of code logic (and also it immediately deprecated a working in use getmemorypool - I've no idea why the proper process for handling version control was ignored there ...)
The person who's name is on the commit also bypasses using getblocktemplate for block changes on his pool because getblocktemplate is too slow. That's a pretty telling fact. ... and worse, his solution is to mine empty blocks with no transactions other than the coinbase transaction. This is also the origin of the path that lead to SPV mining.
Is there a reason someone can't design an intelligent getblocktemplate replacement that can hook into the block change processing and supply a new template, with the transactions in the memory pool that are not affected by the block being processed, but build off that new block, once it has been verified as valid? CPUs these days are pretty quick and multi threaded ... I can't see why a few ms delay building a template of already validated, unused transactions should be an excuse for mining empty blocks.