In short, avrdude on Windows does not have a proper implementation of the functionality that is supposed to drain off any stray characters from the communication channel when initiating programming with a device over a network. This functionality is essential for many (all?) devices being programmed in order for both sides to synchronize. For more information, see avrdude bug #48767.