Unfortunately, I can't reproduce this either, but I have a theory on what is going on.
`with-temp-buffer' calls `generate-new-buffer'. This, in turn calls `get-buffer-create', which run `buffer-list-update-hook'. In theory, if a function on this hook would trigger a tool-bar redisplay, `(with-temp-buffer (insert "XXX"))' will too.
If this is the cause of the problem David is seeing, one solution would be to temporarily bind `buffer-list-update-hook' to nil in `with-temp-buffer'. (This might be a good idea anyway, since we don't want `with-temp-buffer' to be slowed down by slow hooks, unless is it more important to ensure that the buffer list is up to date?)
When it comes to the HFS coding rewrite, I still think it is valid. The documentation of `define-coding-system' indicated that it expects the pre-write function to convert the current buffer and that the two parameters are only there for backward compatibility. The function, before the rewrite, was clearly written for an older version of `define-coding-system'.