Le problème est que la deuxième partie de votre argument de sous-chaîne inclut le premier index. Vous devez soustraire le premier index de votre deuxième index pour que cela fonctionne.
SELECT SUBSTRING(@Text, CHARINDEX('the dog', @Text)
, CHARINDEX('immediately',@text) - CHARINDEX('the dog', @Text) + Len('immediately'))