Yes that approach would be more appropriate given what you are wanting to accomplish.
First thing to check, is if you are using plain text or html emails. If you are using html emails, then you'll want to be editing the files in skin1/mail/html not skin1/mail. You said you know items are being passed so I presume that is not the issue.
In func_order_data, which is where I believe the $products information is being pulled, the order_details table is being queried also:
Code:
$products = func_query("SELECT $sql_tbl[order_details].itemid, $sql_tbl[products].*, $sql_tbl[order_details].*, ....
So it's difficult to determine where the problem lies without some debugging. I would start by placing an order, and then modifying the confirmation invoice to display your information, as on this confirmation screen you can hit refresh which is easier than constantly changing order status' to trigger the email notification.
I would then echo some statements in the various func/func.order.php components to see what is happening and ensure that the $products array is being populated where you think it is.
Oh, you also want to ensure that your templates aren't caching preventing your changes from being read.