Using a secondary data source as part of a default value can be very powerful if you want the value to update every time your secondary data source changes. But it can have undesireable side effects, as you have seen -- if you don't want the value in the main data source to be updated when the secondary data source changes, better to use a rule.
You may also want to set another rule on the product field -- if it is blank, to set the price back to blank. That way if for some reason the product is set back to blank (not sure if that is a valid scenario in your form), you know there won't be a value in the price field.
Happy InfoPath-ing!