Hola Adrián !
Es muy interesante la pregunta.
Hay una equivocación de concepto en lo que dices, pero igual está muy bien y celebro esta clase de análisis que estás haciendo.
He de decirte que no se crea dos veces el mismo objeto. Analicemos un poco...
El campo de instancia miScanner (tipo Sacanner) se declara una sola vez, en la línea 1.
En la línea 3 lo que hacemos es inicializarlo.
Y detengámonos un poco a pensar en que consiste esa inicialización: consiste en asignarle la referencia de un objeto nuevo que estamos creando.
La línea:
new Scanner(System.in);
crea un nuevo objeto tipo Scanner, correcto?... Y esa referencia es asignada al atributo miScanner.
En la línea 6 hacemos exactamente lo mismo: creamos un nuevo objeto escribiendo
new Scanner(System.in);
y a la referencia de ese objeto (objeto anónimo, es decir sin nombre) se la asignamos al atributo miScanner.
Conclusión: La línea 1 declara el atributo (el campo de instancia). Y las líneas 3 y 6 son sentencias de asignación. Claro que lo que asignamos son REFERENCIAS de objetos que creamos en la misma línea.
Te agrego unos pasos intermedios (eviatando la utilización de objetos anónimos) para que sea más gráfico el procedimiento, fíjate:
1) Scanner miScanner;
2) System.out.println("\nIngresa un mes");
2.4) Scanner objetoTeclado 1;
2.5) objetoTeclado1 = new Scanner(System.in);
3) miScanner = objetoTeclado1;
4) while (!miScanner.nextLine().equalsIgnoreCase(mesesAnio[mesSecreto])) {
5) System.out.println("Incorrecto, intenta de nuevo ingresando otro mes");
5.4) Scanner objetoTeclado2;
5.5) objetoTeclado2 = new Scanner (System.in);
6) miScanner = objetoTeclado2;
7) }
Analízalo con detenimiento y cualquier duda estamos aquí para reveerlo. Saludos!