Did you try removing the try/catch block so that the full stack trace is exposed? You'll be able to tell which line it's erroring out on.
I'm guessing it's either
for (int b = 0; b < 3; ++b) sender.Send(requestBytes, requestBytes.Length, searchEndpoint);
or
if (ParseResponse(Encoding.ASCII.GetString(data, 0, data.Length)))
The first one wouldn't make sense as it's created above... which leaves the 2nd: and that sounds like a faulty response from some UPnP device.