Bien, hemos tenido problemas similares como este antes.
La forma en que solucionamos esto fue creando parámetros locales dentro del SP, de modo que
DECLARE @LOCAL_Contract_ID int,
@LOCAL_dt_From smalldatetime,
@LOCAL_dt_To smalldatetime,
@LOCAL_Last_Run_Date datetime
SELECT @LOCAL_Contract_ID = @Contract_ID,
@LOCAL_dt_From = @dt_From,
@LOCAL_dt_To = @dt_To,
@LOCAL_Last_Run_Date = @Last_Run_Date
Luego usamos los parámetros locales dentro del SP en lugar de los parámetros que se pasaron.
Por lo general, esto solucionó el problema para nosotros.
Creemos que esto se debe a la detección de parámetros, pero no tenemos ninguna prueba, lo siento... X-)
EDITAR:
Eche un vistazo a Diferentes enfoques para corregir el rastreo de parámetros de SQL Server para ver algunos ejemplos interesantes, explicaciones y correcciones.