Problem polega na tym, że druga część argumentu podłańcuchowego zawiera pierwszy indeks. Aby to zadziałało, musisz odjąć pierwszy indeks od drugiego indeksu.
SELECT SUBSTRING(@Text, CHARINDEX('the dog', @Text)
, CHARINDEX('immediately',@text) - CHARINDEX('the dog', @Text) + Len('immediately'))