Recently I faced a problem, when I was not able to publish the entity. There were no missing fields or missing relationships. After a long troubleshooting, I found that it is happening due to currupt FormXML in OrganizationUI table for the entity. FormXML is stored in this table for entities. I had a problem with quote entity. I found out that there two entries for quote entity. It seems that one is for form opened for customization and the other for normal record rendering. there was problem with formXML for customized form.
I interchanged the flag for isCustomization of these two entries. After that, entity got published successfully. It seems entry for normal record rendering was not corrupt. So when it became formXML for customized form, it got published successfully.
Please note that this is totally unsupported way. You should take all necessary backups if you want to do this.