This may not be what you're looking for and its certainly not what I would call concise however the attached code generates a trend plane through all the points within each drainage area.  It then calculates the slope and aspect of the trend plane and enters them into the drainage area feature.I used point geometry as the input to the IInterpolationOp.Trend method but I believe you may be able to use a grid instead.Cheers!
Public Sub CreateTrendPlane()
Dim pMxDoc As IMxDocument
Dim pMap As IMap
Dim pSF As ISpatialFilter
Dim pLiDARPointsLayer  As IFeatureLayer
Dim pDALayer As IFeatureLayer
Dim pDAFeatCur As IFeatureCursor
Dim pDAFeat As IFeature
Dim pSelectionSet As ISelectionSet
Dim pArea As IArea
Dim pPoint As IPoint
Dim pArray As IArray
Dim pRasterIdentify As IRasterIdentifyObj
Dim pSurfaceOp As ISurfaceOp
Dim pRasterLayer As IRasterLayer
Dim pOutputRaster As IRaster
Dim pAspectRaster As IRaster
Dim pSlopeRaster As IRaster
Dim pIdentify As IIdentify
Dim lAspectFieldIndex As Long
Dim lSlopeFieldIndex As Long
Const ElevationFieldName = "GRID_CODE"
Set pMxDoc = ThisDocument
Set pMap = pMxDoc.FocusMap
Set pDALayer = pMap.Layer(0) ' put DA layer at top of TOC
Set pLiDARPointsLayer = pMap.Layer(1) ' put LidarPoints layer next
lAspectFieldIndex = pDALayer.FeatureClass.FindField("MyAspect")
lSlopeFieldIndex = pDALayer.FeatureClass.FindField("MySlope")
Dim iCount As Integer
Dim iNumber As Integer
iCount = 1
iNumber = pDALayer.FeatureClass.FeatureCount(Nothing)
Set pDAFeatCur = pDALayer.FeatureClass.Search(Nothing, False)
Set pDAFeat = pDAFeatCur.NextFeature
While Not pDAFeat Is Nothing
    Set pSF = New SpatialFilter
    Set pSF.Geometry = pDAFeat.Shape
    pSF.GeometryField = pLiDARPointsLayer.FeatureClass.ShapeFieldName
    pSF.SpatialRel = esriSpatialRelContains
    Set pSelectionSet = pLiDARPointsLayer.FeatureClass.Select(pSF, esriSelectionTypeIDSet, esriSelectionOptionNormal, Nothing)
        
    Dim pFDescr As IFeatureClassDescriptor
    Set pFDescr = New FeatureClassDescriptor
    pFDescr.CreateFromSelectionSet pSelectionSet, Nothing, ElevationFieldName
    
    Dim pInterpolationOp As IInterpolationOp
    Set pInterpolationOp = New RasterInterpolationOp
    
    Dim pRasterAnalysisEnv As IRasterAnalysisEnvironment
    Set pRasterAnalysisEnv = pInterpolationOp
      
    pRasterAnalysisEnv.SetCellSize esriRasterEnvValue, CVar(15)
    pRasterAnalysisEnv.SetExtent esriRasterEnvMaxOf
    
    Dim pInputPoints As IGeoDataset
    Set pInputPoints = pFDescr
    
    Set pOutputRaster = pInterpolationOp.Trend(pInputPoints, esriGeoAnalysisLinearTrend, 1)
    
    Set pSurfaceOp = New RasterSurfaceOp
    
    Set pAspectRaster = pSurfaceOp.Aspect(pOutputRaster)
    Set pSlopeRaster = pSurfaceOp.Slope(pOutputRaster, esriGeoAnalysisSlopePercentrise)
    
    Set pRasterLayer = New rasterLayer
    pRasterLayer.CreateFromRaster pAspectRaster
        
    Set pIdentify = pRasterLayer
    Set pArea = pDAFeat.Shape
    Set pPoint = pArea.Centroid
    Set pArray = pIdentify.Identify(pPoint)
    Set pRasterIdentify = pArray.Element(0)
  
    pDAFeat.Value(lAspectFieldIndex) = pRasterIdentify.Name
    pDAFeat.Store
        
    Set pRasterLayer = New rasterLayer
    pRasterLayer.CreateFromRaster pSlopeRaster
        
    Set pIdentify = pRasterLayer
    Set pArray = pIdentify.Identify(pPoint)
    Set pRasterIdentify = pArray.Element(0)
  
    pDAFeat.Value(lSlopeFieldIndex) = pRasterIdentify.Name
    pDAFeat.Store
        
    Set pDAFeat = pDAFeatCur.NextFeature
    
    ThisDocument.Parent.StatusBar.Message(0) = "Calculated " & CStr(iCount) & " of " & CStr(iNumber)
    iCount = iCount + 1
    
Wend
MsgBox "Done"
End Sub