Using the 'cabal sandbox add-source' solution now requires that I
"add-source" the MarketModel package too. Otherwise, any change I make
to this package will not be tracked.

then…
 
Cabal sets the paths for "import"ed
modules in the "hs-source-dirs:" and that is global to the whole
package.

 I can't tell if you do or do not want ProfitCalculator and Persistence to track changes made in MarketModel.

If you do, and both should be in lock-step with it (unlike your situation with Tax), then you don't have a problem.

If not, then the problem is Trader would depend on ProfitCalculator which might depend on a different version of MarketModel than Persistence (upon which Trader also depends). That is a classic dependency problem and not a function of submodules or add-sourcing, per se. The Trader module seems to be at the top of this heap - why would you want the Trader to (indirectly) use one version of MarketModel through ProfitCalculator, and another through Persistence?