One opaque predicate I found in a malware sample years ago:
SetErrorMode(1024);
if ( SetErrorMode(0) == 0 )
SayHiToEmulator();
DoRealStuff();
As for the other question, how to build new opaque predicates, I think it depends on the kind of analyser you want to disrupt. It's different to disrupt a static code analyser designed to find bugs than disrupting an emulator designed to mimic the environment where a malware should run in.
But, let's say that you want to disrupt malware emulators: you can build a list of APIs from the most common libraries (kernel32.dll, advapi32.dll, user32.dll, etc...), create a batch of proves where you execute those APIs changing the arguments and checking the return values and generated exceptions, if any, and save the results. Then check the results of such APIs and find candidates: For example, a return value related to the input to such APIs is a good candidate for an opaque predicate. Specific conditions (exceptions or return values) that only happen rarely and with certain specific inputs are even better. Just some ideas...