There are several issues in your post that I'd like to address. I'll try to go in the order they appear:
(1) must I use events for discontinuous functions?
In order to get accurate simulation results, you must use either doses or events to tell the solver when discontinuities occur. I put together this simple example on the topic.
(2) What's wrong with using a mathematical expression like y = exp(-k*t)?
I assume you're referring to this MATLAB Answers post? The answer is incorrect (or at least very misleading), and I will work with Technical Support to update it. The correct answer is that you can use expressions like these in repeated assignment rules, but you must use time instead of t when you want to refer to simulation time. Also note that MATLAB is case sensitive, so you cannot use Time or TIME.
There's a secondary question of when is it appropriate to use repeated assignment rules versus rate rules versus reactions. All are supported with SimBiology, and there are a lot of factors that might affect which you use. But here's my rule of thumb: If I can easily write my model using repeated assignment rules, I do so. If not, I use reactions for species and rate rules for everything else.
I prefer repeated assignment rules because they are faster and more accurate than solving differential equations. I prefer reactions over rate rules because they simplify the bookkeeping and more closely match how I think of the model.
(3) What's going on when I use a repeated assignment rule for clocktime = mod(time,minperday)?
I suspect the plot looks strange because the ODE solver is sampling your "shark tooth function" at irregular times. Any plot of a periodic function will be extremely sensitive to the sampling times. For example, if you plot cos(time) for time=0:2*pi:100*pi it will look like cosine always has a value of 1.
This problem is exacerbated by the fact that your function is both periodic and discontinuous. To get a plot that shows the true shape of the curve, you need to sample just before and just after every discontinuity. Unless the ODE solver knows where those discontinuities occur, it will not be able to sample times appropriately.
(4) What's the best way to model a "shark tooth function" in SimBiology?
This is the crux of your post, but it's important to understand the background above before I provide an answer. My recommendation is to continue implementing the "shark tooth function" using a repeated assignment clocktime = mod(time,minperday). However, you also need to inform the solver about the periodic discontinuities using an event or dose. This is quite similar to the example I mentioned earlier. Since your discontinuities are periodic, I think the easiest approach is to use add a "dummy" repeat dose targeting an arbitrary species in your model. Set the dose amount to 0 so that it doesn't really modify the species, set the interval to 1440 minutes, and the repeat count to a value large enough to cover your entire simulation. The net result is that this dose will force the solver to reset its internal state every 1440 minutes so that it can accurately capture the behavior of your "shark tooth function."
I hope this covers everything.