When the primary shape is a donut polygon and the secondary shape is a polygon that matches the interior ring of the primary shape, the SE_shape_difference function returns a three-part polygon that includes the primary polygon and the secondary polygon. It should return only the primary polygon.
To work around this problem, first unite the two shapes with SE_shape_union and take the difference of the union result and the secondary shape with SE_shape_diffence.
This problem is addressed in ArcGIS 8.1 Service Pack 1. See the Related Information section to download this pack.