I believe build_export_depends includes libraries dynamically linked by libraries you export as well as libraries included by headers you export.
It’s also worth noting that for some packages, the build_depend key may be different from the exec_depend key. The most common case of this is that many system packages have a libfoo and libfoo-dev where the latter includes headers. The headers are needed to build, but not to run. Of course, not all packages have both rosdep keys declared, and there’re a lot of lazy dependencies on libfoo-dev.
Comment for the first diagram: As @EVenator mentioned the statement All build depends must be run depends. as well as the visualization of this in the diagram is incorrect.
Comments on the second diagram:
The definition of depend is wrong. You can find correct definition in REP 140 (depend = build + build_export + exec).
The statement All build export depends are build depends is incorrect - similar to the first diagram.
sorry to hijack this old post, but I really want the dependency (especially build_export) in package.xml to deprecate in favor of cmake (or ament cmake)