params sobrecarga aparente ambigüedad - todavía compila y funciona?

Acabamos de encontrar estos en nuestro código:

public static class ObjectContextExtensions
{

    public static T Find<T>(this ObjectSet<T> set, int id, params Expression<Func<T, object>>[] includes) where T : class
    {
        ...
    }

    public static T Find<T>(this ObjectSet<T> set, int id, params string[] includes) where T : class
    {
       ...
    }
}

Como puede ver, estos tienen la misma firma excepto por laparams.

Y están siendo utilizados de varias maneras, una de ellas:

DBContext.Users.Find(userid.Value); //userid being an int? (Nullable<int>)

lo cual, extrañamente para mí, resuelve la primera sobrecarga.

Q1: ¿Por qué esto no produce un error de compilación?

Q2: ¿Por qué el compilador de C # resuelve la llamada anterior al primer método?

Editar: Solo para aclarar, esto es C # 4.0, .Net 4.0, Visual Studio 2010.

Respuestas a la pregunta(3)

Su respuesta a la pregunta