a write to a volatile field happens before every subsequent read of the same field.
This text is what's confusing. It limits the happens-before relationship to writes that happen-before the read! It only says that reads that happen after, actually happen after.
In other words, what it's trying to say is that the read doesn't happen during the write, and also that if there are other happens-before relationships that cause the read to happen after the write, that the read will have the value of that write.
See the JLS section 17.4.4 Synchronization Order which defines the word "subsequent" in this context.