なるほど。
勘違いしていました。
TempData には、以下のようなメソッドが用意されています。
TempData["hoge"]
TempData["hoge"] で値を取得すると、削除マークが付き、次回リクエスト以降は取得できない。
TempData.Peek("key")
TempData.Peek("key") で値を取得すると、削除マーク無しに値を取得できる。
TempData.Keep()、TempData.Keep("key")
TempData.Keep() を実行すると、次回も値を取得できるようになる。
つまり、TempData["hoge"] で値を取得しない限り、ずっと値は保存されているわけです。
また、TempData["hoge"] を使ったとしても、TempData.Keep(); を実行すれば値は保存されます。