Saludos Andres95 agradezco mucho tu comentario...
En ese caso que mostre no se requiere el SQL dinámico, sin embargo no solamente utilizo las variable de fecha inicial y fecha final sino otras más que si requieren de consultas dinámicas.
Bueno y respecto al problema en general logre resolverlo de la siguiente forma, espero que a alguien le sea de utilidad:
En vez de utilizar WHERE matrizhistorico.fecha BETWEEN @fechainicial AND @fechafinal puse:
WHERE YEAR(Matrizhistorico.fecha) BETWEEN ' + CAST(YEAR(@Fechainicial) AS varchar) + ' AND ' + CAST(YEAR(@Fechafinal) AS varchar) + ' AND MONTH(Matrizhistorico.fecha) BETWEEN ' + CAST(MONTH(@fechainicial) AS varchar) + ' AND ' + CAST(MONTH(@Fechafinal) AS varchar) + ' AND DAY(Matrizhistorico.fecha) BETWEEN ' + CAST(DAY(@Fechainicial) AS varchar) + ' AND ' + CAST(DAY(@Fechafinal) AS varchar)
De esta manera funcionó a la perfección.