Полагаю, эти промежутки генерируются какой-то программой, поскольку они, похоже, не имеют каких-либо атрибутов.
Я озадачен тем, что вам нужно поместить пространство, заключенное в угловые скобки, но опять же, я не знаю конечной цели кода.
Я думаю, что решение дано Кентом: вы должны сделать совпадение не жадным: так как вы используете опцию (и) dotall, вы будете сопоставлять все между первым и последним заключительным промежутком!
Так что ответ должен выглядеть так:
preg_replace('#<span>( |\s)*?</span>#si', '<$1>', $encoded);
(непроверенные)