We use sql spatial and come across the self intersecting error in ArcMap, typically after intersecting two featureclasses using STIntersection(). One way we fix the issue is to use Reduce() to minimize the vertex count and that may resolve the self intersecting error or by using STBuffer(). We have issues with godzilla polygons and using reduce will remove allot of vertices without changing the area significantly. We manage our data in acres with 2 decimal places and using Reduce(.01) works well. If you use STBuffer(), it ensures esri reads the sql geometry as a polygon instead of mixed, some records as polygon and some as point or lines. Adding a very small buffer works for us but I understand it may not for others. example: a.shape.Reduce(.01).STBuffer(.01) as SHAPE