The first thing that comes to mind is SqlGeometry.STDifference. See the documentation for use. I don't know what happens when you attempt to construct the difference of two lines. I'll run a couple of tests and report back.
Edit: Actual results.
As an aside, I really like being able to play in SQL Server Management Studio and get immediate gratification.
Given:
declare @line1 geometry
declare @line2 geometry
declare @poly1 geometry
set @line1 = Geometry::STGeomFromText( 'LINESTRING(0 0, 10 10)', 0 );
set @line2 = Geometry::STGeomFromText( 'LINESTRING(0 10, 10 0)', 0 );
select @poly1 = @line2.STBuffer(.5);
select @line1.STDifference(@line2)
union all
select @line1.STIntersection(@line2).STBuffer(.1)
select @line1.STDifference(@poly1)
select (@line1.STDifference(@poly1)).STAsText();
Which gives us:

and

Neither are exactly helpful, but result 2 is what you'd expect at least.
The resulting linestring is MULTILINESTRING ((10 10, 5.353553295135498 5.353553295135498), (4.646446704864502 4.646446704864502, 0 0))
Short version: you get to do trim (if you're talking lines) yourself. You do get a lot of help from Sql Server in the form of StIntersection, which will give you a (multi)point geometry of all the locations the lines intersect, but you're then responsible for building the new geometry. For instance:
declare @line1 geometry
declare @line2 geometry
set @line1 = Geometry::STGeomFromText( 'LINESTRING(2 0, 2 10, 4 10, 4 0)', 0 );
set @line2 = Geometry::STGeomFromText( 'LINESTRING(0 10, 10 0)', 0 );
select @line1.STIntersection(@line2).STAsText();
yields MULTIPOINT ((2 8), (4 6))
Extra added bonus:
select @line1.STUnion(@line1.STIntersection(@line2)).STAsText();
returns LINESTRING (4 0, 4 6, 4 10, 2 10, 2 8, 2 0), which is line1 plus the intersection points with line2 embedded in it in the correct location. This would make walking the line determining which side it's on & keeping the point or tossing it much easier.