原因がわかりました。
major-mode 切り替えの際に kill-all-local-variables が実行されるんだけど
その際にバッファローカルなフックも消滅しちゃうんですね。
そんでもって *scratch* バッファ上で initial-major-mode が実行されるのは after-init-hook が実行された後だという・・・

lisp-interaction-mode-hook は多分 scratch 以外では使わないだろうから問題ないだろうけど
特定のバッファに紐付くのを特定のメジャーモードで設定するのはどうなんだろう