A resposta curta: sniffing de parâmetro.
A resposta longa: quando você executa pela primeira vez um procedimento armazenado, o otimizador de consulta examina os parâmetros transmitidos a ele e os metadados sobre os objetos que estão sendo consultados. Se esses metadados mudarem significativamente ao longo do tempo (por exemplo, o histograma estatístico muda) ou se os parâmetros iniciais não forem representativos de uma chamada típica, o plano que o otimizador armazena em cache pode se tornar insatisfatório. Ao fazer um freeproccache, você se livra do plano "ruim" e força o otimizador de consultas a executar outra tarefa.
Se você puder descobrir qual procedimento armazenado é o filho problemático, você pode adicionar "com recompilação" à definição do procedimento e ele não armazenará em cache o plano para esse procedimento. Se você puder encontrar a instrução dentro do procedimento que está causando o problema, poderá adicionar "option (recompile)" a ela e apenas essa instrução será recompilada quando o procedimento for executado.