The Offset method does not modify your curve, but return an array of offset curves, which you are ignoring in your example. If the offset worked well, the array contains one entry. It’s all documented in the RhinoCommon API.
The short fix would be:
var crv = fl1.Item1[i].Offset(Plane.WorldXY, 5000, RhinoDocument.ModelAbsoluteTolerance,
CurveOffsetCornerStyle.None)[0];
c2.Add(crv);
But some Error handling for the case you receive an array with 0 or multiple entries would actually be better
Well … the offset task is one of the most challenging things that you can deal with.
See just an entry level intro (solves about 1% of the whole puzzle) on that matter in the attached C# . A bonus C# sheds some light on some freaky curve points as well.