HttpListener に問題があります。正常に動作しています (404 を返すことを含む)。出力ストリームに何かを書き込むと (404 のカスタム html を返すため)、ステータス コード = 404 を設定しても、firebug はステータス 200 を表示します。カスタム html を削除するとすぐに、期待どおり 404 が表示されます。
そのまま 404 が表示されます。2 つのコメント行のコメントを外すと、表示したい HTML が表示されますが、404 が予想されるのに 200 が表示されます。
//var buffer = System.Text.Encoding.UTF8.GetBytes("<html><head></head><body><h1>404 not found</h1></body></html>");
//ctx.Response.OutputStream.Write(buffer, 0, buffer.Length);
ctx.Response.StatusCode = 404;