It doesn't look like the last two parameter sets that the documentation promises are passed to ChartElementFunction are actually passed. A test:
DensityHistogram[RandomVariate[BinormalDistribution[.5], 20],
ChartElementFunction -> Print];
{{-2.,-1.},{-2.,-1.}}{}{}
{{-1.,0.},{-2.,-1.}}{}{}
{{-1.,0.},{-1.,0.}}{}{}
{{-1.,0.},{0.,1.}}{}{}
{{-1.,0.},{1.,2.}}{}{}
{{0.,1.},{-2.,-1.}}{}{}
{{0.,1.},{-1.,0.}}{}{}
{{0.,1.},{0.,1.}}{}{}
{{0.,1.},{1.,2.}}{}{}
{{1.,2.},{2.,3.}}{}{}
{{3.,4.},{1.,2.}}{}{}
The bin lists themselves can be obtained in two ways:
Firstly, from the internals of DensityHistogram using the height specification function (one possibility for the third argument):
data = RandomVariate[BinormalDistribution[.5], 20];
Reap[
DensityHistogram[data, Automatic, ((Sow[{##}, bindata]; ##) &)],
bindata
]

Secondly, using HistogramList:
HistogramList[data]
{{{-2, -1, 0, 1, 2, 3}, {-2, -1, 0, 1, 2}}, {{0, 2, 1,
0}, {1, 0, 3, 0}, {0, 3, 3, 0}, {0, 0, 2, 4}, {0, 0, 1, 0}}}
As you can see, the bin boundary specification is written slightly different, but is in principle the same. The bin count lists are the same.