Thanks guys, I appreciate that you are trying to make it easy with a non programmatic approach but I don't think it is going to work. The key point is that I am not trying to limit the quantity or the number of products based on what product/s are in the cart. The only time I want to limit the quantity to 1 is when the user has specified that they are using an existing serial number (order custom field, see condition below). Before the original code snip I provided above there is also the following condition, along with some other plugin calls that I have not shown which confirm that the entered serial number is valid.
if($fields->order_existing_serial == 'yes')
It is only if the users specifies a serial number that we wish to limit the cart. Can you please advise how I can update the cart and all of the payment view values. As I mention earlier the $cartClass->update((int)$product->product_id, 1); is only partially working. It does indeed update the cart but the $this->orderInfos is not updated and therefore the incorrect values are shown in the view.
I know the $cartClass->update() works because I can restart the checkout process and the correct quantities have been updated but I don't want to make the users start the checkout process again if possible, but rather just notify them via a message the the quantities have been updated. This is what my original code snip is trying to achieve but only partially working.