Я не эксперт по картам Google, но на первый взгляд кажется, что вы не слушаете действительное событие. Поскольку (по крайней мере, кажется, читая ваш код) вы передаете объект Map, вам следует придерживаться действительных событий Map. Здесь (см. Таблицу событий) нет события 'maptypechanged':
http://code.google.com/intl/it-IT/apis/maps/documentation/javascript/reference.html#Map
Может быть, вы хотите событие 'maptypeid_changed'?
В любом случае, первый аргумент метода addEventListener - это объект, который вызывает событие. Таким образом, в качестве второго аргумента вы передаете событие, которое будет вызвано ТОЛЬКО объектом. Тем не менее, всегда находите документы об объекте, который вы передаете в качестве первого аргумента (в данном случае Map, но это может быть, например, объект Marker и т. Д.) И смотрите, какие именно события он вызывает.