Not sure yet, if you have any suggestions let me know.
I don't have any good suggestions. What I would do is to include the transaction fee rewards with the blocks for now and begin to scale the share values appropriately once bitcoind 0.5 comes out. This means that the pool will be less than perfect on the pool hopping front for now but instinct tells me that it's a big improvement over the loyalty bonus approach.
Perhaps Meni has some better ideas.
I find it odd that with the current version one can't get the block reward. As a temporary measure until the new version I'd do one of the following:
1. If "Transaction fees are paid" is not important for the pitch, I'd just keep them.
2. If it is, base all score calculation on B=50. When a block is found, in addition to the payment specified by the method, pay the transaction fees for the block to participants in proportion to their score.
Each new job is basically a header containing, among other things, a list of transactions to be verified. This means that the "block reward + transaction fees" as far as a miner of this pool sees them will only change when new work is pushed. Consequently, the pool would only need to find the total transaction fees for each of the jobs it sends out and not the transaction fees currently up for grabs on the network when a share is submitted.
Yes, except that only the Merkle root of the transaction list is in the header, not the entire list.
A competing pool could react to new transactions by compiling and sending out new jobs more frequently (perhaps whenever it can increase the block reward + transaction fee by 0.1 BTC). The shares at a pool would consequently be more valuable on average and so they could offer higher income for their miners.
Yes, if transaction fees are rapidly changing, the pool (and, in a proper scoring method, the miners) are incentivized to work on an up-to-date header with higher fees. This should be balanced with the resource cost of frequently pushing work.