This is confusing indeed. Let me repeat what you are showing here:
Out= a < b < c
Out= parse2[a < b < c]
In:= parse2[a < b < c]
During evaluation of In:= Matched!
In looks exactly the same, yet one evaluates the other doesn't. Are they really the same? The first thing to check in such cases is their
As you can see, they are not the same, even though they are formatted in the same way in
StandardForm. This explains why there is a match in one case but there isn't a match in another.
I'll update the post if I can come up with a workaround that seems better than the obvious (i.e. manual transformation of
The undocumented function
Reduce`InequalityExpand seems to convert inequalities such as
a < b < c to the form
a < b && b < c. This may be useful for your purposes.
The documented function
LogicalExpand also carries out this transformation. But it also does other things which may or may not be desirable depending on your specific problem.