Вы бы знали длину, если бы сначала записали XmlTextWriter во что-то вроде MemoryStream. Оттуда вы можете получить байты, установить httpWebRequest.ContentLength равным длине байтового массива, а затем записать байтовый массив в ваш запрос
редактировать
Середина вашего кода будет выглядеть примерно так (я думаю):
MemoryStream ms = new MemoryStream();
using (writer = new XmlTextWriter(ms, System.Text.Encoding.UTF8))
{
writePaymentRequest(writer, registrant, amount, signature, ipaddress);
}
byte[] bytes = ms.ToArray();
ms.Close();
httpWebRequest.GetRequestStream().Write(bytes, 0, bytes.Length);
httpWebRequest.ContentLength = bytes.Length;
edit # 2
Вместо XmlTextWriter(ms, System.Text.Encoding.UTF8)
, попробуйте XmlTextWriter(ms, new UTF8Encoding(false))
, чтобы увидеть, решает ли это проблему кодировки