Tal vez te aclare un poco entender como se asignan los valores en Java.
Para variables primitivas se asignan por valor pero para arrays y objetos se asignan por referencia como sucede en tu caso.
Cuando inicializas ListaAuxiliar, estas creando una referencia de un array en memoria, esta referencia es asignada a la variable ListaAuxiliar.
List<double[]> ListaAuxiliar = new List<double[]>();
Una referencia puede ser referenciada (valga la redundancia) por una o mas variables, Cuando agregas ListaAuxiliar a ListaPrimaria estas creando una nueva variable ListaPrimaria[x] que referencia a la misma posición de memoria que ListaAuxiliar, esto significa que puedes modificar el mismo array utilizando estas dos variables y cualquier operación que realices sobre estas dos variables se veran reflejadas en la otra porque a la final es la misma referencia.
ListaAuxiliar.clear();ListaPrimaria[x].clear();
Ambas lineas modifican al mismo array.
Lo que necesitas hacer para reutilizar la variable ListaAuxiliar es reasignar esta variable a una nueva posición de memoria, dejando la anterior posición de memoria referenciada únicamente por la posición del array en ListaPrimaria, esto lo haces volviendo a instanciar un nuevo array asignandolo a ListaAuxiliar, en tu caso solo basta con mover esta linea
List<double[]> ListaAuxiliar = new List<double[]>();
dentro del bucle y eliminar la linea donde limpias el array porque es la que elimina los elementos en la referencia del array.
while (i < 2){ List<double[]> ListaAuxiliar = new List<double[]>(); if (i == 0) { ListaAuxiliar.Add(Arreglo1); ListaAuxiliar.Add(Arreglo2); ListaAuxiliar.Add(Arreglo4); } if (i == 1) { ListaAuxiliar.Add(Arreglo3); } ListaPrimaria.Add(ListaAuxiliar); i++;}