preincrement means exactly what you think, you add 1 to the variable before using said value. It also stores this incremented value back into the original location. The assignment operator also stores a value back into the same location. You now have two writes to the same memory location and no guarantee about which one will happen first. Just because the arduino code does the right thing, does not mean it doesn't fall into the undefined behavior category.
EDIT: This article confirms it: c++ - Undefined behavior and sequence points - Stack Overflow