In general you can use AcDbCurve::getFirstDeriv(double param, AcGeVector3d& firstDeriv) to calculate the derivative at the parameter param. This should also work for both start- and the end-parameter of a closed curve.
The bigger problem is to deal with "points of C1 discontinuity". I think the only safe way to find those points for general AcDbCurves is to retrieve the geometrically identical AcGeCurve3d with
AcDbCurve::getAcGeCurve (AcGeCurve3d*& pGeCurve, const AcGeTol& tol)
and use
Adesk::Boolean AcDbCurve::explode(
AcGeVoidPointerArray& explodedCurves,
AcGeIntArray& newExplodedCurves,
const AcGeInterval* intrvl = NULL
) const;
to split it into C1-continuous curves and determine their derivatives at start/end-parameters.
Thomas Brammer ● Software Developer ● imos AG ● LinkedIn ● 
If an answer solves your problem please [ACCEPT SOLUTION]. Otherwise explain why not.