I just found this thread while looking for help on another bug and it is very interesting. I had exactly this problem intermittently and it wasn't related to incomplete records. Whenever an event is created by copying an existing event from the frontend (doesn't happen when working from the backend), the fee connected to a fee-related field is not recorded, but this happens only intermittently. This does not seem to happen when using one set fee on the Discounts & Fees tab.
For example, we offer classes with a different fee for new and renewal students, each with a different price. This means we have to use fee-related fields rather than setting a single price in the Discounts & Fees tab. It's easy to see if this bug has occurred by going to the frontend and clicking on the "register" button. Then select "New" or "Renewal" student and see if the appropriate class fee is displayed at the top of the page. If it is, then everything will work fine. If the fee is not displayed, then everyone registering for that event/class will receive a confirmation email indicating the class/event is free. The Admin email and the database will also show the class is free.
I submitted a support ticket and was told that this has never happened before, that they couldn't duplicate it, and that it must be with my web host's server. It's obvious from this thread that I'm not the only person who had/has this problem. I completely rebuilt the site with a fresh install on a different server and spent many hours doing so. The problem still exists on an intermittent basis.
I found something that helps and it may help others. When an event is created by copying an existing event from the frontend, save the new event after making necessary changes like dates, etc., then immediately open the new event and save it again without making any changes. Thus far, it has worked 100% of the time. A key step is saving the event twice after making any changes.
I hope some find this helpful.