Device Tree just declares that some hardware exists, with enough information to allow the kernel to locate a driver. You are expecting it to declare that once we have an accurate time source to program the RTC, which is a much higher level operation - it just doesn't fit the DT model.

If the "invalid argument" error only occurs the first time you use the RTC then I think you are going to have to go through a commissioning process that sets the clock. If instead it is occurring every boot then that suggests that either the RTC isn't holding its value (no battery backup) or that the content is being corrupted. Either way this is no longer a DT problem and you would be better off asking on a different forum - Interfacing or Advanced Users, perhaps.

I was just about to ask about adding support for the M41T62, glad to see you've already done it.

In addition to reading and writing the RTC with hwclock, I also want to program its interrupt (to fire at a given interval or absolute time in the future). Is that supported using this overlay (presumably through /dev/rtc), and if not, where should I look for pointers on how to add that?

Answering my own question: the current rtc-m41t80 driver doesn't support the "wakealarm" entry in /sys/class/rtc/. I submitted a small patch to the driver to enable this when the "wakeup-source" property is specified along with "m41t62". Then you can write the time in seconds to that file and the alarm interrupt will occur at that time.

I don't seem to be able to get any 'wakealarm' entry - should this be available now ?
I'm using the very latest raspbian stretch, used rpi-update to get the latest kernel :
Linux raspberrypi 4.9.57+ #1045 Fri Oct 20 11:38:56 BST 2017 armv6l GNU/Linux

In config.txt I have tried many different combinations but currently this :
dtoverlay=i2c-rtc,m41t62
dtparam=wakeup-source

I get /sys/class/rtc/rtc0 and everything works fine - just nothing called wakealarm.

I'm probably doing something wrong so any pointers would be nice....
Thanks.