I don't currently have a 9.3.1 machine but I tested on 10.
I used the geometry on geometry check with the point as the first feature class and the line as the second. I chose Intersects as the relation type and enabled the not option. I did not specify a tolerance.
For my sample data I created a few lines and snapped points to the edge, vertex, and ends of some of the lines. I create a point completely disconnected and another close to the end of the line but not snapped. Only the points that were not snapped were returned. The selected features in the attachment are the only ones returned for me.
If this option does not work for you, you can try the custom relation *T******* - this operation should find all points snapped to the end of the line (enable the not to find those not connected to the end of a line). You can create a composite check that returns the results you mentioned - the orphans + those snapped to the ends. Then you can add another Geo on Geo check to limit those results to those not snapped to the ends of points - use the *T******* with the not checked on. If this doesn't make sense, let me know and I can included a sample bactch job.