Hi Rafe,
You can dynamically alter the options in an optionset using JavaScript. The following link should help you in doing this;
http://stackoverflow.com/questions/20453320/dynamically-change-option-set-values-in-crm
Alternatively you could move the Product Type and Product Sub-type lists into separate entities, and have 2 lookup fields on the form. Lookup fields can be filtered by other lookups, so as long as you put a lookup reference to Product Type on the Product
Sub-type record, you will be able to enforce filtering the Product Sub-type without the need to write and maintain code.
This also makes it easier to add more options into the lists in the future.
~ Atomic Coder