It seems to me that you draw new random numbers for each evaluation.
I don't think you should draw new random numbers each time. If you do
so, your likelihood function will never be smooth and you cannot hope
to use gradient based methods to maximise it.

You should instead first draw a number of random variates, and pass
these on to the evaluator as if they were data. Alternatively, I guess
you could set the seed to be a constant everytime my_ll is called.