There’s a bug in the fetch/Request implementation. When the request body is an instance of URLSearchParams the request’s content-type header should automatically be set to “application/x-www-form-urlencoded”
Could you post a minimal, complete reproduction? When I tried the code snippet you posted in our fiddle, it works as expected: Cloudflare Workers. I also manually inspected our underlying implementation, and it looks correct to me.
Could it be that you’re using a URLSearchParams polyfill, and maybe we’re not recognizing it as URLSearchParams?