I gather sometimes you have two clusters and sometimes you have only one. What you want is to visualize the variance of the lower (or single, depending on the situation) cluster to see how they compare from iteration to iteration.
I think boxplots should be fine for this, you just only want to make / display boxplots for the lower cluster if there are two. This suggests you first run a cluster analysis, and extract only the data for the lower cluster when there is more than one. Any number of cluster analyses should be fine for this, especially because your clusters are so widely separated. If you are sufficiently confident your clusters are Poisson, you could use Poisson finite mixture modeling (cf., When to use LDA over GMM for clustering?), but given the wide separation, Gaussian mixture modeling should work just as well.
The following is a rudimentary version of this algorithm, coded in R (I'm sure this could be made more elegant and efficient). Note that I'm capitalizing on the fact that the relevant cluster is guaranteed to be lower. If that isn't true, or there's more to the situation than what I have here, this procedure would need to be elaborated.
library(mc) # you'll need this library for the clustering
DGP = function(){ # this is the data generating process
if(runif(1)<.5){ pop = rpois(800, 800)
} else{ pop = c(rpois(780, 800), rpois(20, 4000))
}
return(pop)
}
mat = matrix(NA, ncol=5, nrow=800, byrow=FALSE) # to hold the data
set.seed(1) # makes the example reproducible
for(j in 1:5){ mat[,j] = DGP() } # generating the data
box.list = vector(length=5, mode="list") # for the data we want to examine
names(box.list) = paste("Iteration", 1:5)
for(j in 1:5){
mc = Mclust(mat[,j]) # the clustering
box.list[[j]] = mc$data[mc$classification==1]
}
d.frame = stack(box.list)
windows()
boxplot(values~ind, d.frame)

windows()
boxplot(as.data.frame(mat)) # this is without the clustering
