Concuerdo con EdePC. La explicación está muy bien, pero desde el inicio parece lógico y claro que no es necesario poner un if con una condición sobre cuando acabar el while, si dicha condición se puede poner en la condición misma del while.
Creo que lo ideal sería que el programa no esté mirando a cada milisegundo si se tocó Enter o no, sino que quede detenido hasta que se presione Enter, pero eso parece imposible. Por ejemplo, el sistema de una linterna, supongo, no es que esté chequeando a cada milisegundo si se está presionando un botón o no, nada hace, pero cuando se apreta eso activa algo. Pero un programa creo que no funciona así...
while (Console.ReadKey(true).Key != ConsoleKey.Enter);
Console.ReadKey detiene la ejecución del programa y espera a que el usuario presione una tecla, solo cuando el usuario presiona la tecla esta se comprueba si es Enter, si no es, el bucle se vuelve a repetir, pero en todo momento siempre se queda pausado esperando que el usuario teclee algo.
Si otro fuera el caso si que hay que poner una pequeña pausa para no saturar al sistema con un bucle pesado.