As AlexGreg said on 2015-11-18, the Dude2TheN solution doesn't work anymore since Javascript Google Maps API v3.20 have been retired yesterday.
But I've implemented with success Jim Bacon (and szekerest) solution : you need to use an updated (and so unofficial) version of OpenLayers.js 2.13.1.
I've shared a copy of my resulting and modified file (tagged 2.13.2 for internal purpose, but keep in mind that it's not an official release) : but my original OpenLayers.js 2.13.1 was actually a custom file, an extract of the official OpenLayers.js 2.13.1 (for performance purpose, I get rid of whole parts that I didn't use with a tool which name I forget), so consider this file as a model to see the modification involved and keep in mind that if you use some OpenLayer component that I did not included, it won't work at all...
Update : after further attempt, here is a complete version of unofficial OpenLayers.js 2.13.2 based on official OpenLayers.js 2.13.1, that includes all OpenLayers component
Update 2 : for AlexGreg, this is my modification between official OpenLayers.js 2.13.1 (at line 1081):
{if(e.parentNode!==c.div)if(b.rendered)c.div.appendChild(e),b.googleControl.appendChild(c.viewPortDiv),google.maps.event.trigger(this.mapObject,"resize");else{var h=this;google.maps.event.addListenerOnce(this.mapObject,
"tilesloaded",function(){b.rendered=!0;h.setGMapVisibility(h.getVisibility());h.moveTo(h.map.getCenter())})}this.mapObject.setMapTypeId(d)}else
and my unofficial OpenLayers.js 2.13.2 :
{if(e.parentNode!==c.div){if(!b.rendered){var h=this;google.maps.event.addListenerOnce(this.mapObject,"tilesloaded",function(){b.rendered=!0;h.setGMapVisibility(h.getVisibility());h.moveTo(h.map.getCenter());b.googleControl.appendChild(c.viewPortDiv)})}else{b.googleControl.appendChild(c.viewPortDiv)}c.div.appendChild(e),google.maps.event.trigger(this.mapObject,"resize");}
this.mapObject.setMapTypeId(d)}else
But actually, it's the exact modification proposed by Jim Bacon, I've just integrated them in a complete operational file