I don't know what database version and characterset you are using, but convert probably doesn't do what you are expecting :) That's why the 11.2 documentations says "Oracle discourages the use of the CONVERT function in the current Oracle Database release."
I suggest to use utl_http.write_raw if you need to do any characterset conversions.
We had similar problems when writing data to a service and the root-cause was that per definition the content-length must be in bytes while the length() function returns number of characters which may be different when using different character-sets and umlauts.
There were strange errors, when the length was not correct.
You don't need to convert the content, as write_text does the conversion.
Maybe this helps:
http_req := utl_http.begin_request(url, 'POST','HTTP/1.1');
utl_http.set_header(http_req, 'Content-Type', 'text/xml; charset=utf-8');
utl_http.set_header(http_req, 'Content-Length', lengthb(CONVERT(env, 'UTF8')));
(our db is MSWIN1252)