I can't remember how it works in OG 6.x, but this check only works for the Group Node itself - what about group content, which may or may not inherit the visibility settings of its container group?

Re-loading the node object seems unnecessarily heavy

The fields used in OG 7.x-1.x and 7.x-2.x are (potentially) quite different, and entering this PHP into the database as a setting makes it very hard to fix if OG changes yet again

This only works for OG-related use cases. The o.p. actually starts with a generalised question: what if other node access modules are enabled? We need a generalised solution.

Instead, I suggest we use the Drupal-version-specific version of node_access(), with a user-configurable switch on the admin settings form analogous to the 'hide for unpublished content' check. The attached patch for 7.x-2.x adds this setting in service_links.admin.inc:

Due do the diversity of Drupal modules, it's kinda impossible to evaluate whether the node is public or not (since you can have temporary public node, special codes, GET parameters, ...), so I don't see how this can be build into the module.