Hola.
La función
CreateMutex , si bién se usa para controlar secciones críticas en programacion concurrente, en este caso su función es relacionar un identificador único a cada instancia de la aplicación.
En el ejemplo, si encuentra que dicho identificador está presente, aborta la ejecución del programa. Si no, continua la ejecución.
Es por que no depende de la búsqueda de procesos, como las que has utilizado, que te la sugerí.
El ejemplo que te puse es totalmente funcional en situaciones normales, pero al ocultar el proceso puede que tampoco encuentre el identificador y por lo tanto no aborte la ejecución...
Un saludo.