The problem with e.IsCompleted being false is a bug. The Saved event does fire when the save is truly complete, we've just forgotten to set that flag (it is finally set by the time the callback passed to the SaveChangesAsync is called). We'll get this fixed. You can use e.Result.OK, but you should check either e.Error or e.Exception first (they'll return the same thing, e.Exception is typed as an EntityManagerSaveException). e.Result.OK will be true if a) the save was not cancelled and b) an error occurred which was handled by an EntityServerError handler.
e.Cancelled and e.Result.WasCancelled will always be the same. Our confusing API came about because we decided to make the EntitySavedEventArgs do double duty -- these args extend System.ComponentnModel.AsyncCompletedEventArgs yet are used both for the Saved event, which is raised for sync and async saves; and as the arguments to the async callback. The AsyncCompletedEventArgs defines a Cancelled property, while our DevForce SaveResult uses the WasCancelled flag. A SaveResult is returned by a synchronous SaveChanges(), and is also the type of the e.Result here. We'll see if we can clean up the API and/or documentation a bit. :)