Der Server (leased) sendet Etag und Last-Modified, der Browser fragt mit denselben Werten an und der Server liefert stets einen Status: 200 (.html, .css, .js)
Normalerweise sollte ein Status: 304 da kommen.
Nun, ich habe mit FileETag None in der .htaccess den Etag mal ausgeknirpst und siehe da, die 304-Geschichte läuft wie geschmiert.
Der ETag für statische Dateien wird aus I-Node, Dateigröße und letztem Änderungszeitpunkt berechnet. Der Änderungszeitpunkt geht (logischerweise) in Last-Modified, daran kann's also nicht liegen. Ich würde sicherheitshalber erstmal I-Node und Dateigröße prüfen (zB mit ls -il in einer Shell, falls vorhanden), auch wenn ich nicht wüsste, warum sich die zwischen zwei Aufrufen ändern sollten.
Alternativ könntest du auch die drei FileETag-Optionen einzeln durchprobieren, dann müsste es doch eigentlich bei MTime funktionieren und bei mindestens einem der beiden anderen haken.