I think you could accomplish this with out having the itemisapackage column in your cart. As long as you have a weight that is set to 0 for downloads and set to something else > 0 for shipping items, you could add a rule to the shipping where it only does shipping when it needs to.
If you open your eCart object, and go to the shipping tab, and click the add button (or you might want just to edit an existing one). Add a trigger and for the condition select "Subtotal for any column", and make sure to set it to ">" than 0.
This way the shipping is only going to be applied if your total weight is greater than 0.
let me know if you are still having issues after making these changes.