I found what I think was the problem. After sifting through this code, which I am not an expert on, I found a piece that was commented out for a contribution. I think the contribution was OTF, but I would have to confirm that. I can't believe nobody else had this problem.
The shopping_cart.php in catalog was like this:
if (isset($products[$i]['attributes']) && is_array($products[$i]['attributes'])) {
while (list($option, $value) = each($products[$i]['attributes'])) {
// BOF Option Type Value - Commented out php echo
//echo tep_draw_hidden_field('id[' . $products[$i]['id'] . '][' . $option . ']', $value);
// EOF Option Type Value
I removed the comment ("//") that blocked the echo tep_draw_hidden_field('id[' . $products[$i]['id'] . '][' . $option . ']', $value);
Don't know why that needed to be blocked, but it works now with it back in.
if (isset($products[$i]['attributes']) && is_array($products[$i]['attributes'])) {
while (list($option, $value) = each($products[$i]['attributes'])) {
// BOF Option Type Value - Commented out php echo
echo tep_draw_hidden_field('id[' . $products[$i]['id'] . '][' . $option . ']', $value);
// EOF Option Type Value