I dont have your data to reproduce the error, but the following seems to work for me:
K = 3
mu0 = [2, 25, 80]
p = [.1,.7,.2]
nsamp = 100
tmp = np.asarray([np.random.poisson(mu_, size=(100,)) for mu_ in mu0]).T
obs = tmp[range(nsamp), np.random.choice(K, nsamp, p)]
obs[obs<1] = 1
obs[obs>70] = 70
boundPoisson = pm.Bound(pm.Poisson, lower=1, upper=70)
with pm.Model() as m:
w = pm.Dirichlet('w', np.ones(K))
mu = pm.HalfNormal('mu', shape=K)
bp = [boundPoisson.dist(mu=mu[i]) for i in range(K)]
x2 = pm.Mixture('obsx2', w, bp, observed=obs)
trace = pm.sample()
x2ppc = pm.sample_ppc(trace, 1000)