I think you shouldn't even assume that you'll get consistent results from the exact same compilation, running multiple times. For example, regardless of the current actual implementation, an unstable sort could use a random pivot point for partitioning.
For types that equal types are literally equal, like primitive integers, .sort() and .sort_unstable() would produces same sorted list - since every possible sorted list are literally equal. For more complex types where equal doesn't implies bitwise equality, you can't use .sort_unstable() if the actual order of equal types matter.
But the question is whether equality of these structs covers all of their members. The below struct, for example, can be used with sort_unstable, and you will get consistent results*.