After trying a couple of different things, and based on information from this SO post and Google Maps Custom Overlays. I ended up with this solution:
// Constructor
function CustomOverlay(map) {
this.setMap(map);
}
// Inside main function
// ...
/*
Custom Overlay
Overlay holds the Pane that holds GroundOverlay, so we can
accquire the handle to set the appropriate zIndex.
See:
https://developers.google.com/maps/documentation/javascript/customoverlays.
https://stackoverflow.com/a/3063476/82180
*/
var customOverlay;
CustomOverlay.prototype = new google.maps.OverlayView();
overlay = new CustomOverlay(map);
CustomOverlay.prototype.onAdd = function() {
var panes = this.getPanes();
panes.overlayLayer.style['zIndex'] = 10; <!-- Magic # based on experimentation! -->
}
CustomOverlay.prototype.draw = function() {
// NOOP
// The overlay is just a container, we are not adding any custom
// graphics/text onto it.
}