Carve booleans are used in Blender for a long time. This library has it's own limitations and cases when it will fail and produce incorrect results. It is also very slow.
Bmesh booleans is the new implementation aiming at being a faster solver (really shows on high-dense geometries). So far it also has limitations, but devs are working on it to resolve any bugs. You can trace the progress here:
BMesh booleans (track todo's)
Bmesh might handle some cases better than Carve and vice-versa. It depends on the geometry and those cases are hard to generalize. Bmesh should be faster than Carve. You should avoid non-manifold geometry for both.
In time Bmesh booleans might (hopefully will) fully replace Carve booleans.