It is hard to say what is happening without looking at the code, but I can guess.
The two emails issue is probably that you have the email trigger set to "before page load" and the first time it loads it doesn't have information and it sends a second time when the form submits and then it has the data. The solution is probably to update the email trigger to the form submit event or a particular button press.
I don't see why an item without a price wouldn't be shown. What version of eCart are you using. Some payment gateways won't work with zero dollar items. That might be the logic for why a zero dollar item wouldn't be added, since it could cause errors if you ever tried to pay, but looking through the code I don't see what would cause it not to be added or shown.
Please attach a copy of your shopping cart include and the WA_eCart_Definition_PHP.php file you are using and I can see if I can spot what is removing zero dollar items.