If someone comes across this old post, this is the solution:
template <typename T>
bool StructEquals(const T& First, const T& Second)
{
return T::StaticStruct()->CompareScriptStruct(&First, &Second, 0);
}
CompareScriptStruct is used by blueprint system itself as a generic way of comparing USTRUCTs based on their UPROPERTYs. It is invoked when using an Array.Find or Array.Contains blueprint node for example.
Also see my post about a solution for the opposite problem: Using a custom C++ == operator in these blueprint nodes instead