When loading a calexp, the _setFilter function in CameraMapper tries to look up the filter name from the butler, rather than using the information contained in the exposure itself. This means that to be loaded successfully, all exposures must either have their filter in the filename/path (decam does not) or be listed in the registry. This was discovered when Ian Sullivan was attempting to load decam calexps that had been generated without corresponding raw files being registered, which should have been possible.
The docstring and the function's behavior seem to have diverged about six years ago with this commit: https://github.com/lsst/obs_base/commit/8719cf189e6b37d4e55d09c09e061ac67293bbe1
Tagging Kian-Tat Lim and Nate Pease [X] on this just as an example of a butler lookups lurking in places they probably don't belong. This doesn't require a fix from their end; it's a science pipelines issue.