I don't think that's it, Jason.
I use the ID column in the eCart object for the id of an SKU table which holds individual records for each distinct product (unique combinations of products, colors, sizes, widths, etc). I have to do it this way instead of your productoptions solution to better produce ordering coordination with my clients many vendors. That ID is numeric.
The id of the products table is text. That table contains all the information related to a given product - description, base price, brand, etc. That's why I add a ProductID column to the eCart object.
When I check on the values of $_SESSION['PromoProduct'] used in the discount rule and the eCart "ProductID", they match.