An oddity I stumbled across was that IfcProfileDefs seemingly cannot be used as IfcCurves. There is an IfcConic which seems to duplicate circles, but that’s about it. Why not just reuse IfcProfileDef? Or did I miss something?
Interesting point. I think the distinction profile/curve is relevant and useful, so your proposal could be to move the parametric profile definitions more to the domain of curves and make IfcProfile more generic that it can reference IfcCompCurve/IfcCircle or IfcIShapeProfileCurve. The parametric profile curves are more or less equivalent to a composite curve so could be treated consistently. This would as you mention also clean up the duplication of IfcCircle and IfcCircleProfileDef. It would just be an IfcProfile with Curve=IfcCircle.
Personally though, I’d rather see IfcCurve a bit smaller if we want reliable advanced breps. You really don’t want polyline/compcurve/profile as edge curves in your brep. I’d prefer a bit clearer distinction between continuous or even monotonic curves and the others. But I didn’t give this a lot of thought.