First off, add some debugging:
Code:
alias topics { echo -s >TOPICS triggered | scon -at1 echotopics }
alias -l echotopics {
  echo -s >ECHOTOPICS triggered
  var %n = $chan(0)
  echo -s >CHAN(0) is $chan(0)
  while (%n) {
    echo $color(Topic text) -t $chan(%n) $+(* Topic is ',$chan(%n).topic,')
    echo -s >N is %n
    dec %n
  }
}

Secondly, I see that for local aliases $isalias indeed returns $false. You could simply try to rename both aliases, e.g. topics1 and echotopics1 and see if it then works.
I especially doubt the alias echotopics already exists though.