How does BoxWhiskerChart detect outliers?
iqrc = "IQRCoefficient" /. ChartElementData["BoxWhisker", "Options"];
1.5
fences = Quartiles[data][[{1, 3}]] + {-1, 1} iqrc InterquartileRange[data]
outliers = Select[Not @* Between[fences]] @ data
{-3.0844, -3.4005}
which matches the vertical coordinates of outlier glyphs:
Cases[BoxWhiskerChart[data, "Outliers", PerformanceGoal -> "Speed"],
Inset[_, {_, a_}] :> a, All]
{-3.0844, -3.4005}
It is actually in the help documentation as the last item. Outliers are 1.5 InterQuartileRanges (IQR) away from the nearest quartile and Far Outliers are 3 IQR distant.