I am planning to work around the problem by sending a GET request with Range: 0-0 instead of a HEAD request for your server. The result should be pretty much identical to a HEAD request, with an extra byte.
For the record, this is what a HEAD request to pc.r0k.us returns:
Connection: close
Date: Tue, 14 Jul 2015 14:15:02 GMT
Server: Apache
Content-Type: text/html; charset=iso-8859-1
Client-Date: Tue, 14 Jul 2015 14:15:05 GMT
Client-Peer: 174.127.119.148:80
Client-Response-Num: 1
Edit: well, this is interesting. Sending a GET request with Range: bytes=0-99 results in a 403 Forbidden. At this point I am wondering if it's blocking the User Agent for not being a standard browser? Sending a GET request with no range results in the same error.
Connection: close
Date: Tue, 14 Jul 2015 14:23:15 GMT
Server: Apache
Content-Length: 342
Content-Type: text/html; charset=iso-8859-1
Client-Date: Tue, 14 Jul 2015 14:23:17 GMT
Client-Peer: 174.127.119.148:80
Client-Response-Num: 1
Title: 403 Forbidden
Edit 2: yep, it was the User Agent. I set the header to clone my browser's ("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2453.0 Safari/537.36") instead of using the default for LWP::UserAgent, and now both GET and HEAD work fine.
Connection: close
Date: Tue, 14 Jul 2015 14:33:53 GMT
Accept-Ranges: bytes
Server: Apache
Content-Length: 5667432
Content-Type: application/x-msdownload
Last-Modified: Fri, 04 Feb 2011 08:03:42 GMT
Client-Date: Tue, 14 Jul 2015 14:33:56 GMT
Client-Peer: 174.127.119.148:80
Client-Response-Num: 1
The host is picky about what software can access it, apparently. The problem is that I don't know what header Tequila and Island Rum send when they're requesting content, so now my validation tool works, but the patcher itself might not. I'll have to test.