Я думаю, что проблема в том, что overlayImage выходит за рамки, когда вы добавляете прослушиватель событий.
В качестве теста попробуйте объявить переменную глобально, а затем назначить переменную позже.
/* top level */
var overlayImage;
...
/* later on */
overlayImage = new google.maps.GroundOverlay("myimage.png", imageBounds);
В javascript вы не можете просто передать переменную в функцию и надеяться, что она подберет что-то, что вы объявили ранее.Другая вещь, которая может происходить, заключается в том, что слушатель события передает объект события в качестве первого параметра в функции обратного вызова, но вы назвали его overlayImage, поэтому в этом обратном вызове контекст overlayImage фактически является объектом события.Вы бы сделали что-то вроде:
google.maps.event.addListener(map, 'zoom_changed', function(event) {
/* overlayImage can now be used */
overlayImage.someAPIFunction();
}