I already saw finding the actual cause as a 'lost cause' as these things tend to happen, however what bothers me most is that a tool like amcheck which is supposed to find corruption also shows up with no result.
Well, no, these things really should not happen. :)
It may be too late, but it would be real interesting to see this query both before and after the REINDEX:
select * from pg_index where indrelid = 'bcf_work_type'::regclass and indisprimary;
An incorrect indrelid is one way I can think of as to how pg_dump would miss it, but that wouldn't explain why reindex would subsequently fix it.