Я не думаю, что слишком страшно разделять дополнительные методы по отношению к статическому и экземпляру, так как Framework иногда делает это (например String.Split / Join).
Но, сказав это, я думаю, что цель минимизации использования статических методов не очень хорошая идея. Следует избегать статического изменяемого состояния, а не статических методов. Статический метод, который работает только со своими параметрами, а не со статическими переменными, - это просто потрясающе.
Чистая статическая функция может быть более удобной в обслуживании, чем метод экземпляра, поскольку метод экземпляра не сообщает очевидным образом, какие поля экземпляра он может изменять. Следуя правилу, согласно которому статическое состояние не поддерживается, можно полагаться на статический метод, работающий только с его параметрами, и, таким образом, роль метода в приложении можно лучше прогнозировать. Это особенно важно при многопоточности.
Поскольку метод ToXmlString применяется к экземпляру класса, в котором он определен, некоторые из этих соображений неприменимы. Он может легко изменить состояние объекта, который ему передается скрытно, так как он может получить доступ ко всем закрытым членам экземпляра. Но я просто хочу сказать, что, как правило, статические методы не являются проблемой.