правильно это сделать относительно сложно.
когда что-то хочет куда-то сдвинуть карту — на map.events происходит событие actiontick
из него можно вытащить event.get('action') и немного подправить.
у него есть поля globalPixelCenter и zoom и если следить чтобы эти значения не уходили за некие пределы можно и получить кофетку.
Следить за boundschange и другими событиями не совсем верно так как это позволит пользователю широким жестком кинетического драга улететь куда угодно.