Toot's got the right idea, but his code is a little malformed (for mSL, anyway).

The primary issue with your code, HoHoes, is the way you've structured it. When dealing with conditions on the same level,the elseif/else statement(s) are checked only when the previously checked condition was false, but the if condition(s) are always checked. So, because the "if ($2 == on)"/"if ($2 == off)" conditions (x2 for some reason) are on the same level as the else statement above them, they are checked regardless.

What you can, and should do, as Toot demonstrated, is nest those conditions within the "if ($nick isop #) { }" block, so that they can only be checked if that precondition is true. You should also note that you can run multiple commands within these blocks, rather than repeatedly checking the condition per command, as you appear to have done:

Code:
on *:TEXT:!twitter*:#sho94: {
  if ($nick isop #) {
    if ($2 == on) {
      timerMessage 0 1200 describe # Follow Sho on twitter! http://adf.ly/nseve
      describe # Timer Twitter turned on!
    }
    elseif ($2 == off) {
      timerMessage off
      describe # Timer Twitter turned off!
    }
  else { describe # Sorry you must be a mod to use this command }
}


I hope you get the idea, but let me know if you need any help understanding what I've said here.