OK. Я понял. Я записываю план того, что я сделал здесь, на случай, если кто-то столкнется с той же проблемой.
Ключевой метод - ISurface.InterpolateShape . Он скопирует существующую 2D IGeometry и добавит в нее трехмерную информацию с поверхности (растр или TIN). Я перевел этот пример кода VB6 с VB6 на C # и изменил его так, чтобы он вызывал InterpolateShape для каждой скопированной IGeometry во входной форме FeatureClass перед вставкой его в выходной класс FeatureClass.
Я не буду публиковать здесь какой-либо код, потому что я разработал его на десять центов моей компании, но этого должно быть достаточно, чтобы понять это достаточно быстро. Надеюсь, это поможет другим разработчикам быстрее справиться с этой проблемой.