I think functionally they both do the same thing. The only difference that I can see is that one is writen in C (POSIX::mktime()) and is fully POSIX compliant, and the other is written in Perl (Time::Local::timelocal()), and possibly not. So I'm guessing that timelocal() is more portable, but mktime() is more standard (but that is a guess ;o)
HTH