You should just use the dists directly with the size you want. draw
is a utility to materialize draws which returns a (one time) numpy array.
with model:
mvn = pm.MvNormal.dist(mu=mu_vector,cov=cov_matrix, size=1000)
[... model code that makes use of mvn ...]
phi = pm.Uniform.dist(lower=0,upper=2*np.pi, size=1000)
[... model code that uses both phi and random_draws to predict hist_mean_pdf ...]
z_obs = pm.Poisson('z_obs', mu=hist_mean_pdf, observed=hist_observed)
However PyMC might complain that your logp is stochastic in which case you may need to hide the random draws inside a custom sampler: