InvokeRequired's cost depends on which class is implementing ISynchronizeInvoke, and the specific usage case. The "cost" will very depending on the implementation you are using. However, in general, it's typically a fairly low overhead call. (In many cases, it can be as simple as a check to see if the current thread is the same as the original thread.)
That being said, if you need it, it's worth the cost, ALWAYS. Even if it's only 1% of the time that it will be required, it should be included. Otherwise, you are asking for a crash, lock, or some other very undesirable behavior. Most cases where you could be using this are cases where you should always include this cost.
The most common use case is synchronizing delegates onto the UI thread. In this case, you must use it, or very bad things happen... Also, in this case, the cost is very low compared to the waiting on the message pump for UI interactions, so it's really not worth worrying about.
If you are using it with a custom implementation of ISynchronizeInvoke, and it's happening in a tight loop, AND you've profiled and found that it's causing problems for you, then it may be worth worrying about. In this case, though, I would recommend trying to rework the algorithm itself to avoid the need for synchronizing as much as possible, but still use InvokeRequired as needed.