Whoops, I must have missed that, thanks. I'll annotate it, along with createNewTileEntity().
I've just tried removing all references to TileEntityBlockPlacer and replacing them with TileEntityDispenser. It works, but now, because the block uses a TileEntityDispenser, it shows 'Dispenser' at the top of the GUI rather than 'Block Placer'.
I'm not really sure why TileEntityDispenser works but TileEntityBlockPlacer doesn't, especially as TileEntityBlockPlacer extends it and is exactly the same, except getName(). Perhaps it could be to do with the fact that TileEntityDispenser.stacks is private rather than protected?