ok, let me play with this a bit... I will need to use a demo site to pass some duplicates (not of my lists in production do)
Sorry for getting back to this so late...
Like you, I was unable to get a proper count for duplicated items in the list... so the only way I know how to deal with tracking this is to use your s.products to pass the values. However, I would pair this with a numeric merchandising event.
So for example, the product list notation is:
category;product;quantity;price;merch events;merch eVars
If you are using s.products for other items, I would even considering using the "category" here, not to identify "apples" or "bananas", but rather to denote this use from others (we use our products list for about 20 different things, I use the category to specify each "use", then use the products or merchandiing eVars as the actual data)
Let's assume s.products is being used already, so we will make use of the category to denote the usage (i.e. "fruit")
We'll use the product id for the actual fruit id.
We'll set up a merchandising eVar as the "category" (apple, banana, etc)
We'll set up a second merchandising eVar as the "type" (soda, pie, etc)
And we'll configure a numeric event (not a counter)

When you track your data
1|apple|pie,
2|orange|soda,
2|orange|soda,
It will look like this:
s.events = "event1";
s.products = "fruit;1;;;event1=1;eVar1=apple|eVar2=pie,fruit;2;;;event1=2;eVar1=orange|eVar2=soda"
So you will increment "1|apple|pie" once, and "2|orange|soda" twice
There are no quantity/price values here, since this isn't a purchase event.... and it's weird, but you need to also set the event into your s.events (just not numerically incremented) for the events to count.
Now, you can use event1 (or whatever your actual event is), with your eVars to see 1 or 2, etc for the usage.
*** Updated Dec 22, 2023 - fixed the mixed up order of items in Products List as pointed out by @iceboats (apologies for that)