It seems that v22 has this new option UsePreviousCut. The only influence it seems to have is here:
https://github.com/FreeCAD/FreeCAD/blob/e235a1b795567a99d67e1887a1c7151e60ebe395/src/Mod/TechDraw/App/DrawViewSection.cpp#L351C13-L351C24
That is, in case “base” is also DrawViewSection, then we call either “getCutShapeRaw()” or “getCutShape()”. But the only difference between one and the other is that one is “moved” to have its centroid at (0,0,0), and the other is not:
https://github.com/FreeCAD/FreeCAD/blob/e235a1b795567a99d67e1887a1c7151e60ebe395/src/Mod/TechDraw/App/DrawViewSection.cpp#L568
What am I missing?
https://devtalk.freecad.org/t/complex-section-based-on-complex-section/71487/1
One is the result of the previous section cut and the other is the uncut shape from the first section’s base view.
This is what the variable names tell me. But I cannot see it in the code. I am probably missing something.
Searching for all “m_cutShape” in the source…
$ find src/ -type f -print0 | xargs -0 grep m_cutShape
src/Mod/TechDraw/App/DrawViewSection.cpp: m_cutShapeRaw = rawShape;
src/Mod/TechDraw/App/DrawViewSection.cpp: m_cutShape = preparedShape;
src/Mod/TechDraw/App/DrawViewSection.cpp: BRepTools::Write(m_cutShape, "DVSCutShape.brep");// debug
src/Mod/TechDraw/App/DrawViewSection.h: TopoDS_Shape getCutShape() const { return m_cutShape; }
src/Mod/TechDraw/App/DrawViewSection.h: TopoDS_Shape getCutShapeRaw() const { return m_cutShapeRaw; }
src/Mod/TechDraw/App/DrawViewSection.h: TopoDS_Shape m_cutShape; // centered, scaled, rotated result of cut
src/Mod/TechDraw/App/DrawViewSection.h: TopoDS_Shape m_cutShapeRaw; // raw result of cut w/o center/scale/rotate
… tells me that there is only one place where “m_cutShape” and “m_cutShapeRaw” are set. Here:
https://github.com/FreeCAD/FreeCAD/blob/e235a1b795567a99d67e1887a1c7151e60ebe395/src/Mod/TechDraw/App/DrawViewSection.cpp#L568
m_cutShapeRaw = rawShape;
preparedShape = ShapeUtils::moveShape(rawShape, centroid * -1.0);
m_cutShape = preparedShape;
Since “centroid” is the rawShape’s centroid, I conclude that m_cutShape is just m_cutShapeRaw moved in such a way that its centroid is at (0,0,0).
At least, I understood why the base shape can be another cut. 
Okay, sorry!
I was mixing “getShapeToCut()” and “getCutShape()”.
Anyway, it is very strange that we need an “m_cutShape” and one “m_cutShapeRaw” that are one just a translation of the other.