You have to be careful here. Even if you simulate with parameters \theta, the posterior mean is not going to be \theta. It will approach \theta as data goes to infinity under some mild conditions that include the parameters not growing with the data.
This is easy to understand with coins. The true probability of heads is 50%, but If I toss the coins 7 times, there’s no way I can get an estimate of 50%. This isn’t bias, it’s just variance. That is, if you toss the coins a bunch of time and look at their averages, they’ll be bunched around 50% and have a long-term average of 50%.
Or you can take a standard normal. I might draw three random numbers and observe 1.7, 2.9, and -0.3. I don’t get a sample mean of zero even though that was the value of the location parameter used to generate the data.
If you want to validate that you’re not getting bias, you can perform a bunch of simulations and fits and then use simulation-based calibration to measure if your sampler is calibrated.