Sim, há um padrão: não use o X-Forwarded-For.
RFC 7239 define o cabeçalho Forwarded, que tem uma semântica bastante diferente de X-Forwarded-For, e novas implementações devem para usá-lo. Infelizmente ele sofre do mesmo problema que você identificou com o X-Forwarded-Por: aqui ele pode ser definido duas vezes em uma solicitação ou conter uma lista de valores separados por vírgulas. Proxies também podem deletá-lo totalmente.
E sim, há uma prática recomendada: usar um nome de cabeçalho diferente internamente.
Lembre-se de que o X-Forwarded-For e o seu substituto Forwarded contêm entrada não confiável . É trivial para um cliente colocar o que quiser nesse cabeçalho. Se você realmente precisa saber o endereço IP público do que estiver conectado ao seu servidor, coloque-o em um cabeçalho diferente. Por exemplo, a CloudFlare usa o CF-Connecting-IP para essa finalidade. Eu também vi o Client-IP e o X-Real-IP usados no nginx (onde você pode definir o que quiser). Seja qual for o nome usado, seus balanceadores de carga devem enviar o endereço IP do solicitante em algum cabeçalho diferente de X-Forwarded-For ou Forwarded.