Tunded out to be a timing issue.

This works:

<hotkey lalt d>
<SendLabel w2><wait 50>
<Key F2><wait 50>
<Key lalt d>
<restore>

Apparently I just need to add a <wait 50> after every command that sends something.
It might need to be longer for insurance, but it will take experimentation. This eliminates a lot of troubles I have been having.