Exposing the baseConnection.StateChange events in XDConnection might help to resolve the "The connection is not open." exception thrown on SaveChanges, e.g.:
public override event StateChangeEventHandler StateChange {
add {
this._baseConnection.StateChange += value;
}
remove {
this._baseConnection.StateChange -= value;
}
}