Possibly a really basic thing to check (but heh, sometimes it's the obvious that gets overlooked).
In Attendant, the string you enter as "Subroutine Name" actually bears no relation at all to the eventual subroutine. It is simply a textual identifier to be passed into the CustomSubroutineInitiatorRouter Customization Point. As dcurrier mentioned, the parameter p_sSubroutineName is passed in to the Handler and contains this string. Make sure these actually agree!
As NateDB pointed out, case is important, so I would use the Case Insensitive string comparison function within the Selection step - StrEqlNoCase(p_sSubroutineName,"MyFunkyFunction")
Again, Debug Mode is one of your best friends for this kind of thing. If the Handler is not being called than, another dumb question, but has the Attendant Profile been published?
Finally, remember that the Selection tool is evaluated top to bottom. Is it possible that there is an earlier case that is being matched by accident? Once again, debug should help you here.
Just some random thoughts. I hope at least one of them helps you move forward!