To provide communication between different parts of the app I would use Cake's event system - once order is finalized correct event is triggered, and invoice is generated. (Same example was considered in event's system related chapter of the book).
I would put code into tables as they are like factories - they produce some products - entities. So when I'm generating order, orders table can contain some logic used to create entities, for an example Table can check if customer was promised in the past a 10% off on next order and apply or not such discount, or validate voucher added in the checkout - so table would be smart , while entity will just represent static result of logic used by Table and will be dumb.
If I'm displaying list of orders in the view - I'm working with entities, not tables and I'm keen to see what was order total + what discounts were applied to the order - I do not have to know why some discounts were applied or not.