¿Cómo se convierten implícitamente los tipos enteros?

El siguiente código falla en una verificación MISRA. El mensaje de error concreto es:

(MISRA-C: 2004 10.1 / R) El valor de una expresión de tipo entero no se convertirá implícitamente a un tipo subyacente diferente si no es una conversión a un tipo entero más ancho de la misma firmeza

typedef enum _MyEnum { One, Two } MyEnum;
MyEnum MyVariable;

int foo(void)
{
    int result = 1;

    if (One == MyVariable)  // fails here with MISRA-C:2004 10.1/R
    {
        result = 2;
    }    
    return result;
}
¿Por qué se convierte la expresión lógica?¿Qué se convierte aquí?¿Por qué el código pasa el cheque MISRA, cuando cambioOne yMyVariable?

Editar: El compilador es un TI "MSP430 C / C ++ Compiler v4.0.0" con verificación de reglas MISRA incluida.