Need to look at the fit in more detail but not near my computer now. Till then, I also suggest again trying pm.Censored. In your case since censored values are changing you can supply lower and upper as a list with length equal to number of points where the value of lower is -inf if data is not left
censored and equal to y if left censored and upper would be symmetrical (using inf for uncensored, left censored and the value itself for right censored)
With this it is easy to do tests like remove censoring by modifying lower and upper to constant values -inf and inf see if censoring is creating the effect it should. You also remove the risk of setting censoring model wrongly.
https://www.pymc.io/projects/docs/en/latest/api/distributions/censored.html
I also suggest doing a version of the plot above with a single curve and error bars using mean and HDIs from summary to double check that mean parameters are also create biased fits.