山本です。
もう今日はやらないつもりでしたが、思いついたことがあったので試して
みたところ、かなり単純化できました。
p ENV
$0 = $0 # test/unit/ui/console/testrunner.rb (HEAD) modifies $0
p ENV
パッチを当てると、HEAD も ruby_1_8 も二番目の p ENV が { , , , , } になります。
ruby_1_8 でエラーにならなかったのは、test/unit/ui/console/testrunner.rb で
$0 を変更していなかったからでした。
そして $0= の実装である set_arg0 には
ruby_setenv("", NULL); /* duplicate environ vars */
なんて行があるので、どうも setenv の独自実装と $0= は依存している感じですね。