The Update method returns a Microsoft.SharePoint.SPException exception if the list item has been modified since it was created. For example, this exception is returned if the code returns an SPListItem object but code in a different HTTP request has updated the item previously. This exception is also raised when the data that was supplied for updating an item is invalid.
If you are experiencing this problem when updating a second time or when using CopyTo() method, try getting the List Item again. For example...
sourcePage.CopyTo(newPageUrl);
SPListItem newPage = variationWeb.GetFile(newPageUrl).Item;
newPage.Update();
//CheckIn
//Publish
//Approve
//Do Changes to newPage, e.g. Update Fields
//At this point calling .Update() again will throw the exception.
//Below is to allow .Update() to work
newPage = null;
newPage = SPWeb.GetFile(newPageUrl).Item;
newPage.Update();
//CheckIn
//Publish
//Approve