The first pressing of Escape makes the cell go out of edit mode and the second one reverts the changes made to the underlying property.
What you can try is to create your own custom keyboard command provided (as illustrated in this article and this blog post) and change the commands executed for Escape key to CancelRowEdit.
public override IEnumerable<
> ProvideCommandsForKey(Key key)
> commandsToExecute = base.ProvideCommandsForKey(key).ToList();
if (key == Key.Escape)