A first diagnostic is to perform a PCA to see how data cluster. If then there is evidence that the low-depth sample clusters away from the other members of its condition then it might be a good idea to remove it. You basically check whether there is a data-driven reason to exclude a sample, and clustering based on read depth that cannot be compensated by normalization would be a reason for exclusion, as the difference between samples would be technical and not biological, the latter which you are usually interested in.
Very minimal code example with PCAtools and dummy data:
library(PCAtools)
library(edgeR)
y <- sapply(1:9, function(x) rnorm(10000, 1000, 50))
logcpms <- cpm(y, log=TRUE)
colnames(logcpms) <- paste0("sample", 1:ncol(y))
#/ PCA with top-500 most variable genes:
pca1 <- pca(mat = logcpms[head(order(rowVars(logcpms), decreasing=TRUE), n=500),],
metadata = data.frame(row.names = colnames(logcpms)))
#/ plot it:
biplot(pca1)

After all, 3 is better than 2 so if only the depth is the issue, can't you get some more reads for the library so just sequencing the same sample again? The differene between n=2/n=3 seems to be notable as you describe so I guess trying to keep that one sample would be worth ivesting some $ into sequencing it a bit deeper. If you have a local facility maybe then can spike it into an existing run so the costs would be moderate.