I think the answer is: I should be using isRing. The word "Ring" is self-explanatory.
I was originally thrown off by the fact that some of my lines are multi-parts. So, an individual part could technically be a ring, even though the feature as a whole didn't appear to be a ring.
So, both of my example features were being identified as closed and as rings (my query only looked at the first part of multi-part features; in my examples, the first part was a ring).
I've accounted for the multi-part quirk, and other quirks, in the following query:
objectid in (
select
objectid
from
roads
where
sde.st_numgeometries(shape) = 1 --Needs to be evaluated before isRing. Otherwise, isRing throws an error since it can't be used on multi-part features.
and sde.st_isRing(shape) = 1
and name not like ('% CT') --Some courts are literally just a loop with no straight portion. They are technically legitimate rings. So I'll omit them since I'm specifically looking for roundabouts, not courts.
--and ownership = 'ABC'
and sde.st_length(shape) <= 200 --If a road is longer than 200m, then it probably isn't a roundabout.
--In the future, if needed, I could omit roads with this text in the name (similar to what I did with CT): PL, CIRCLE, DR, TRAIL, CRES, LOOP, SQUARE.
--However, right now, that doesn’t seem to be necessary. Those road types get successfully excluded via the “must be shorter than 200m” criteria.
)