こんな記事を書いたら、いろんな人から教えてもらえました。
@okazuki return返す前にModelState.Clear()っす♪
— BEACHSIDE (@BEACH_SIDE) January 21, 2015
@okazuki MVC の HtmlHelper のバグっすよ、これ。Expression 版は値を見る優先順位がおかしいので壊れるという
— しばやん (@shibayan) January 21, 2015
ということで、ModelState.Clear()を呼び出して解決。これはバグい。