Приведу наглядный пример почему ошибкам БЛ не место в хттп кодах:
Сегодня у вас есть какое-то АПИ, оно вас устраивает и оно поверх HTTP (а тобишь опять таки тот же RPC over JSON) и вы отдаёте ошибки БЛ статус кодами
Ваше апи популярно и у него много клиентов
Наступает момент когда нужно переехать на что-то другое, gRPC там или SOAP(упаси Боже)
И вот начинается настоящая катастрофа
У вас есть контракт описывающий типы сообщений по каждой точке, и этот контракт завязан на статус коды в случае ошибок
И тут при переезде на тот же gRPC вы понимаете что ошибки БЛ больше нельзя выразить привычным способом нормально
И полюбому начинаете городить свои варианты IsSuccess внутри сообщений или его аналоги через перечисление
Поздравляем: теперь у вас 2 разных АПИ с непохожим контрактом