If that occurs, there must be a defined rule, valid for all to give discount. You need to do it in the same way to create a hidden discount category for example and add that unpublished discount category to the discount calculation rule. Or more simple do not create an additional unpublished category for that, just define your discount rule. So for those products you would like to give a discount, just add the hidden discount category to that product, so it is linked to 1. the display category, 2. the unpublished tax category and 3. the unpublished discount category. Or:if no hidden category for that purpose: use Final price on the product tab where you enter your prices and set the dropdown near the Final price to the discount rule. Done!

Virtuemart, as default rule, does the calculations in the following way. If you define a general calculation rule with no limits to category, shoppergroup a.s.o. Virtuemart will take that as default for all. It makes sense for example if you have a shop with only one tax calculation and everything else like discount or so is entered per product to overwrite the mentioned default rule.

So if you assign something on the product level, it will overwrite anything else. In general:

Defining something per product: Virtuemart takes that first! it will overwrite anything else. If you define nothing on product level, VM will calculate with the other calculation rules defined.

So in your case I am shure that you have defined somewhere a unlimited rule to give discount per product.