If I had to make a guess, I'd say that MySQL treats DETERMINISTIC functions as having true referential integrity. Thus, if the function is called with the same argument, it will always give the same result. The upshot of this is that if a function would be called with the same argument multiple times, MySQL might choose to reorder execution so that it's only called once, or maybe it caches the result. I can't find much on Google about exactly what MySQL does when optimizing deterministic functions, but I doubt it would be anything other than what I specified.
If you mark a function as DETERMINISTIC, and it is not, then MySQL might not call it when it should, resulting in potentially incorrect results. For example, if calling it with the value '3' might produce a result of '7' one time and then '8' later on, then you might get '7' both times if MySQL thinks it's DETERMINISTIC.
In any case, if your function is truly deterministic (that is, it has no side-effects and does not read any data except what is passed to it), then marking it DETERMINISTIC won't hurt anything and might help if the optimizer is smart enough to reorder execution or reduce the number of calls. If your function reads or modifies data, or has some other side effect, then you will be definitely safe by not marking it DETERMINISTIC, and you might create problems by marking it DETERMINISTIC, as MySQL might choose an execution plan that would lead to incorrect results coming from the function. In other words, don't lie to MySQL and you'll be fine.