Alright, I got some pretty pictures.
Now, I'm not a shader programmer, I mostly just work in GIMP and a tiny bit in Blender, so my explanations might sound weird...
When blurring something, you need information from everything around it. When it can't get information (hitting edge of blur region), it refers to an abyss policy, usually a clamp (take what information it *does* have and stretch it to fill the gaps) or void (just blend with alpha/transparency).
In the DOF shaders, they have to decide between two abyss policies: blur everything or limit based on local depth.
This results in two artifacts depending on which one of the two the shader favors...
EDIT: Didn't like the amount of images I had. Here's links.
Depth-based approaches give sharp edges, as demonstrated here:
i.imgur.com/hCqRllV.png
Here's RingDOF since it leans heavily in the depth-based policy. Notice the sharp edges, even with really distant objects.
i.imgur.com/3hsEGXN.png
Here's MatsoDOF, which leans heavily in the "blur everything and it's grandma" policy. No sharp edges near two out-of-focus objects anymore.
On the flipside, blur-happy shaders tend to give the "focus halos" around objects.
i.imgur.com/yxnxIpO.png
Here's MatsoDOF again. Notice how the in-focus object has it's color information used for the out-of-focus blurring.
i.imgur.com/u22AORq.png
And finally here's RingDOF, in which the heavy depth-based approach resolves that issue.
So, *that's* why I recommended trying different depth shaders and even fiddling with the options (bokeh can hide these sometimes).