Dictionary<TKey,TVal> が順番を保存しないという仕様なのは前提として。

var dic = new Dictionary<int, int>();
dic[0] = 0;
dic[1] = 1;

var arr1 = dic.Values.ToArray(); // { 0, 1 }

dic.Remove( 0 );
dic.Remove( 1 );

if( dic.Count == 0 )
{
 //dic.Clear();
}

dic[0] = 0;
dic[1] = 1;

var arr2 = dic.Values.ToArray(); // { 1, 0 }


////////////

dic.Clear(); のところでコメントを外すとarr2 も{ 0, 1 }になるんだなぁ
キーのハッシュのキャッシュのせいかなぁ
未定義の動作だからこんなこと考えても仕方ないけど。
それは重々承知としても、無意識に順番を想定しちゃうコード書いちゃうことってありませんか……