How do I refresh SQL server cross database references after a database is reattached with a different name? (Are there hidden synonyms?)
You might want to run sp_refreshview, it is recommended to run this if the underlying tables change at all (this case seems to be a good candidate for that case).

I found the underlying cause. The parse trees of views are generated and cached:

select * from sys.syscacheobjects
where objtype = 'View'


This is the output of the tokenizer, so an attach detach should invalidate cached tokens. An sp_refreshview rebuilds the parse tree.

From the documentation for sp_refreshview:


  Updates the metadata for the specified non-schema-bound view. Persistent metadata for a view can become outdated because of changes to the underlying objects upon which the view depends.