When the metadata file is loaded, we do deserialize its contents using the DataContractSerializer. We're passing to the serializer the full list of "known" types, the same list we'd pass when doing other serialization/deserialization, including moving data between the client and server. So, although it seems a bit odd since this type isn't part of the Code First model, you can think of it as the early warning, which would otherwise come later.
Any known type must be serializable: this can mean marking it up with DataContract/DataMember attributes, or ensuring that it has a public constructor.
It's possible that this type doesn't need to be included as a known type, though. Are you explicitly marking it as a known type?
As for the ProvideEntityAspect attribute, it does not actually mark up the CF entity class with DataContract/DataMember attributes. The class must still be serializable, but these attributes aren't strictly required.