При использовании ToList() когда source не является ICollection в обоих случаях происходит постоянное переаллоцирование массива в Array и List где с каждым новым переаллоцированием lenght*2
Но в List в конечном итогде массив внутренний не урезается финальным аллоцированием