Ну начнем с того, что функция
substr принимает всего 3 аргумента , вы пихаете туда аж 4.
А еще у вас скорее всего $goods_descr_max имеет значение более 250, вот ваше условие и не выполняется, т.к. у оператора && есть приоритеты. Почитайте документацию. Поменяйте условия в IF местами.
Решение вынесено из комментариев:
$gTpl->Assign(array('DESCRIPTION' => htmlspecialchars( str_replace( '{NAME}', $goods['name'], str_replace( '{DESCR}', html2text( ( strlen( $goods['descr'] ) > 250 ) ? substr( $goods['descr'], 0, 250 ) . '...' : $goods['descr'] ), $goods['seo_descr'] ) )
)));