まず、SQLServer2005からは1Page8060バイト以上の定義のテーブルを作成しても警告は出なくなっていて、8060バイト以上のデータを実際に挿入した場合でもエラーにはなりません。
あふれた分のデータはROW_OVERFLOW_DATAとして格納されます。(※見た目にはわかりませんがなんの問題もなく使用できます。)
問題のvarchar(2000)かvarchar(max)かについてですが、varchar(max)はカラムごとに8000バイトを超える場合、LOBと同じ扱いとなり、データ行には16バイトのポインタのみ保存され、中身は別領域に保存されることとなりますが、問題のvarchar(2000)では8000バイトを超えることはないので、必ず行内保存となり、全部で8060バイトからあふれた場合は上記のような保存方法となります。
ということで、どっちにしてもほぼ同じかと思っています。
※ただし、varchar(max)にした場合はsp_tableoptionを使用することで強引に行外保存にすることができます。