the only point of ordering by date then ID is when the dates are the same otherwise you get the problem you have identified when an earlier date is added at a later time. The solution is to create a temporary 'key' by combining the two columns together - in this case date and id. The problem then is that dates are numeric being the number of days since 31/12/1899 - prior to this date the value will be negative. So suggest in your case you can calculate it as a key in your source query
key: format(trandate, "yyyymmdd") & format(ID,"00000")
I've made the ID 5 chars because although you are on small number right now, they will grow. You may need to make it more.
so your record ID 33 becomes "1838050100033"
and for ID 30 becomes "1839050100030"
you may need to make this numeric for faster performance e.g.
key: cSng(format(trandate, "yyyymmdd") & format(ID,"00000"))
and your dsum becomes
BalTrial: CCur(DSum("[CalcTodaysValue]","BillsIssuedAndPaidQuery","key<='" & key & "'")
or if numeric
BalTrial: CCur(DSum("[CalcTodaysValue]","BillsIssuedAndPaidQuery","key<=" & key)
edit, may need to include your historyID as well
BalTrial: CCur(DSum("[CalcTodaysValue]","BillsIssuedAndPaidQuery","key<='" & key & "' and HistoryID=" & historyid)