Three fixes: * When smoothing a coord, the original position should be based off the unsmoothed subdivision (i.e. the vertex coord rather than the smoothed position in the shapekey) * The normal of new vertices created by edge split must be updated (used the same interpolation as pre-bmesh here) * The vertices created inside the subdivided face should use the subdivided coords from edges, so copy the shapekey coords back to vertex coords after subdividing edges