The problem is not in your code, it's in your data.
I just dropped same .NET code together (so I can trap more error messages) that reads your boundary file and creates a closed polyline. If I use this polyline, Civil 3D tells me that it fails to add a boundary. That leads to your error as
oTinSurface.Boundaries.Add(pLineOffset, sName, aeccBoundaryOuter, True, 10.5)
don't return a valid object.
When I offset this polyline inside or outside I can use it as boundary. So I looked a little bit deeper in to your data.
There a a couple of points where you have minimal 0.001 offset between your boundary points and your surface points (I tried with the rounded columns too), falling sometime inside and sometime outside and Civil 3D can't resolvethis problem and no boundary is created. By offsetting there all inside or all outside, so it works.
For testing I created a surface with the points in the boundary file and I can use the polyline without offset as boundary.
It looks like the values in your terrain file and in the boundary file are differently rounded.
There also 3 points (336,338,339) in the terrain file without any hight information, and some points with height 0 (in terrain and boundary file)
Regards
Andreas Luka (Lu An Jie)
http://www.luka-consult.de
Creator of the LX-Stair App for Civil 3D