I gave my replacing algorithm another try, and now I'm using it to move shapes.
The current test is just to move a vertical edge of a box in the XY plane. Moving a vertical edge of such shape in that plane modifies 4 faces, but only changes the normals of 2 faces. I'm using BRepTools::Update at every step that required modification of a shape, but it doesn't seem to be re-calculating the normals correctly. An analysis on the shape just says it's an UnorientableShape.
I would like to avoid re-creating shapes. Is there anything else I should look into?
Thanks in advance.