I'm sure you missed something if you're getting synthetic keys and/or circular references. From your description, all you need is a master calendar (there are plenty examples on the forum) with a key field, let's call it Date, and rename all of your date fields to Date, removing the time part this way:
floor(OrderDateTime) as Date
floor(PackingDateTime) as Date
floor(ShipmentDateTime) as Date
(Depending on the format of the Date field in the calendar, you maybe need to add date() function to the above.)
Edit: Second thought - you probably have already some common fields in Orders, Shipments, and Packing tables that you forgot to mention. If this is the case, you can concatenate all three into one table.