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.