I have been rewriting my code as an Add-In and testing the behavior of Linear Referencing on Polylines that are Z and M aware. I am pleased to say that Points and Lines exported from Route Event layers preserved the Z information at the point and along the line, and automatically interpolates Z values for those points or line end points that occur between vertices. This even occurs on polylines with true curved segments and vertical only polylines.
Based on my testing so far, it appears that an event table could fairly easily be created that could produce a segmented 3D copy of the 3D line broken into equal parts as measured by 3D length for lines that have the M values calculated based on the 3D length of the line. This includes segentation of vertical only polylines.
After 3D Length Measure values are assigned the user can look at the Sketch of the line and easily determine the 3D length between any two vertices (just subtract the lower M value from the higher M value to get the 3D length between the points).
I tested the code on a multi-part line with a gap and by default the code adds no distance between the vertices on either side of the gap. I think I know how to operate on the parts to interpolate a straight line 3D distance between polyline parts, so I should be able to add that as an option.
The code in my post does not handle lines with true curved segments and throws an error for such lines. I believe I have figured out a way to approximate the 3D length values for true curves without altering the curve's geometry or using the I3DCurve interface, provided I assume that the elevation change between the endpoints of the curved segment is linearly distributed over the curve and the curve is not trying to follow an elevation surface.
So a curve with equal elevations at each end will just have M values based on the 2D curve length of the segment, but if there is an elevation change at the ends of the curve, I will treat the segment curve length as though it was a straight 2D line changing in elevation and use the formula SQRT([curve_length)^2 + (z1 - z2)^2]). I think this is how the Route Event layer handles its interpolation of Z values on true curves, but I may be wrong. I still have to do some tests of a new subroutine that uses this formula and correctly applies Spatial Reference units for XY and Z, but I expect that the distortion in measures using this method will be no more than what results from Densifying a curve into small linear segments. (Someone with more math skills than me is welcome to point out any mathimatical logic flaws with the above formula, but if the errors it produces are reasonably low it may be good enough for most uses).
So is anybody interested enough to comment on this? Please let me know.