Wow, I see there are a lot of responses since I last checked. Thanks to everyone who replied.
I figured out a solution last night, while I was lying in bed. During my lunch hour at work today I started the code and then I finished it up soon after I got home this evening. It seems to work fine.
My solution is not nearly as elegant as that of Paul's and eobilor's, and if I had saw their ideas earlier I probably would have attempted that algorithm.
The algorithm I came up with is different than anything mentioned so far. (I just wasn't comfortable with looking for a structure that looped back to the point of origin and then also looked for "eyes." I didn't think it was necessary and determing what cell or cells may have been eyes, which could be empty or of either color, was confusing to me.)
It dawned on me that with every valid ring, no matter how small of a ring or how large of a ring or what type of a ring it is (circular, oval, winding all over the place, etc.) each cell that's a part of the ring is connected (via the same color token) to exactly two OTHER cells, of which THOSE cells are NOT neighbors themselves.
Sure, some ring structures may contain "extra" cells of the same color that are touching a part of the ring, and these cells, for example, may have three or more neighbors, but these cells can be removed/ignored from the connecting structure and you still have a valid ring.
A connecting cell that's a part of the structure with exactly TWO neighbors that ARE neighbors themselves can also be removed/ignored from the structure. This cell also doesn't contribute to the ring.
Obviously, if a cell, for example, only has ONE other neighbor, it cannot possibly be a part of a valid ring, and can be also be removed/ignored from the structure. And a cell THAT cell was connected to, which a moment ago may have had two neighbors that were not neighbors themselves, may now have just one neighbor. So THIS cell can now be removed/ignored, and so on and so on, recursively.
When you're all done removing and checking cells, if you have a structure left with six or more valid cells (again, a valid cell is one that has exactly two OTHER neighbors, of which THOSE cells are NOT neighbors themselves) it must now, by definition, be a valid ring. You don't even have to check to see if it loops back and connects to the point of origin. It must.
And as you're removing/ignoring cells from your structure, when you're down to five cells, you can stop right there because what's left could not possibly be a valid ring.
So far every position I've tested this algorithm with works. Valid rings are identified as such, and structures that have lots of similarly colored cells all nearby but are not rings, are not identified as a ring.
I suspect one could come up with several other algorithms. And if I was writing a bot I'd want the fastest one possible, to leave more time for the evaluation function. Since that's not my goal, my solution works for me.
Again, thanks to all who replied.