I've also found the same thing and managed to find a workaround. If you take a look at Request.cs, you'll see
// Parse query string.
int pos = path.IndexOf("?");
QueryString = pos != -1 ? UrlParser.Parse(path.Substring(pos + 1)) : new ParameterCollection();
Parameters = QueryString;
And that the only reference to Request.Form (_form) is via the DecodeBody() method in the Server class, which gives me the suspicion that form fields are only parsed when using a Server to manage your HttpListeners.
Anyhow, turns out you can grab the Body stream from the request, and use HttpServer.Tools.Parser to get a ParameterCollection for your form;
StreamReader reader = new StreamReader(e.Request.Body);
ParameterCollection parameters = UrlParser.Parse(reader.ReadToEnd());