[warning: MathSpeak below]
I know the "reason", but not how to fix it in Rhino. I use Truespace, and this happens to me all the time. I've had the same thing happen to many of my attempts at such a surface with holes in it.
The problem here is that (too many) points are co-planar. The STL triangularization algorithm is getting lost when trying to generate triangles, and it is reaching beyond what you know as the nearest vertex - to grab one on the far side of the plane.
I have found that one way to to fix this is to make the surface slightly convex, or at least, non-planar. Attached is a picture of what I'm talking about.
It doesn't take much of an offset to "fix" the problem .. as small as a .001mm offset is plenty, and won't show up when being printed.
If you setup the surface so that the points are not all in the same plane, then it won't try to generate the triangles to the far extent of the object.
Basically, what you're enforcing is that the triangles YOU pick will be kept, instead of allowing the automated algorithm try to decide for you.