There's more to escape, try your /timer line in mIRC with immediately issuing a /timers after it. Will look something like this:
* Timer 1 10s delay if ($me == echo -a | echo -a yay! (DALnet)
$me) evaluated to $null ... and the { } are gone.
People can find a little in depth information about how/what should be escaped when passing params to a timer
here Although the best advice is always: create an alias, and call that alias instead. No worries of double evaluating and takes no effort.
EDIT: Note to people wondering: obviously you need to execute the timer command from the command line with double slashes // to reproduce what it would do in a script.