Thanks for your reply.
You know when you write things and then look back the next day and think 'what the hell am I'm talking about?'
This is one of them!
I realise now that making the discount 'non global' and assigning the discount at the product level (Product-specific Discounts) ensures that the discount code can ONLY be used against that product.
But this still does allow other global discounts to be applied to the order if the product allows global discounts, so it's what i want.
I think what didn't help was that there seems to be a bug in the discount code screen, once the code is saved and you go back to edit a field other than the discount value, when the voucher saves it sticks a minus '-' in front of the voucher value and the voucher stops working.
I'll raise this as a bug in case it hasn't been fixed.