Observing the log of Poisson RV

I would also split it up.

for Z_{observed} == \tau*, I use a Poisson likelihood directly:

with model:
    lambda_ = pm.Deterministic("lambda", f(theta, x_predictor))
    pm.Poisson("observed_tau", 
               lambda_[Z_observed == tau],
               observed=np.zeros_like(Z_observed[Z_observed == tau]))

for the rest, I would skip the Poisson latent altogether:

with model:
    pm.Normal("observed_rest", 
               mu=beta0 + beta1 * tt.log(lambda_[Z_observed ~= tau]),
               sigma=sigma_obs,
               observed=Z_observed[Z_observed ~= tau])