Looking at --help, they each have a start_mining and stop_mining command. monerod includes an argument for an address. How are these different from cpuminer-multi?
When you type the start_mining command in monero-wallet-cli (or simplewallet in older versions), the wallet software forwards that instruction to the daemon together with the address that is currently open. The demon then starts mining and sends the rewards to that address (in case it can find a block).
If you start_mining in monerod, you have to specify the address where you want the rewards sent. Other than that it works the same way.
cpuminer-multi is a piece of software that is used to mine on pools. You have to specify the pool URL and an address to start mining (there are a few other options like the number of threads to use).
It is mainly used for solo mining, while cpuminer is mainly for pool mining. I assume that cpuminer is optimized for mining