He estado un buen rato fruteado con esto, y por suerte he encontrado la solución en ServerFault, la copio aquí por si me vuelve a pasar en el futuro.
Tengo una máquina virtual con VirtualBox que tiene Ubuntu Server 12.04, para simular el entorno donde se instalará una web que estoy haciendo. El servidor web es lighttpd, y me estaba haciendo unas cosas rarísimas: yo modificaba un fichero JS y al lighttpd no le daba la gana de actualizarlo, seguía sirviendo la versión antigua pero no solo eso, además solamente enviaba tantos bytes de la versión antigua como bytes tuviera la nueva versión del fichero. Vamos, un WTF en toda regla.
Al parecer esto se debe al VirtualBox, y la forma de solucionarlo es añadiendo esta línea al fichero lighttpd.conf
server.network-backend = "writev"
Y con esto el problema está solucionado. La verdad es que no sé por qué así funciona, pero después del mal rato que me ha hecho pasar ya no me quedan muchas ganas de investigarlo.
Aprovecho para copiar aquí también las reglas de redirección que he utlizado para que cualquier URL que no lleve a un fichero existente se envíe al fichero index.php:
url.rewrite-final = ( "^/([^.?]*)\?(.*)$" => "/index.php?__q__=$1&$2", "^/([^.?]*)$" => "/index.php?__q__=$1" )