Can pm.draw() be used inside a pymc model or will it break links between RVs and observed/likelihood variable?

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: