A workaround is perhaps to do
return ({" "});
instead. That way you don't get the entity reparsed and save another call to your entity callback.
The reparsing behavior that you get when returning strings is imho a bit odd. The RXML parser in Roxen always returns arrays to avoid it (which could explain why this bug has remained undiscovered for so long).