The primary reason that we don't use auto-implemented properties is for those serialization mechanisms that serialize the members and not the properties (such as binary serialization for .Net remoting).
In this case, if you have two applications that compile the same class separately and exchange a serialized copy of the class, there is no guarantee that it will deserialize correctly since you can't control the names of the private members.