From the iptables man page:
SNAT
This target is only valid in the nat table, in the POSTROUTING chain. It specifies that the source address of the packet should be modified (and all future packets in this connection will also be mangled), and rules should cease being examined
MASQUERADE
This target is only valid in the nat table, in the POSTROUTING chain. It should only be used with dynamically assigned IP (dialup) connections: if you have a static IP address, you should use the SNAT target. Masquerading is equivalent to specifying a mapping to the IP address of the interface the packet is going out, but also has the effect that connections are forgotten when the interface goes down. This is the correct behavior when the next dialup is unlikely to have the same interface address (and hence any established connections are lost anyway).
Masquerade and src-nat (RouterOS calls it that rather than snat) are essentially the same thing, but src-nat translates to a static IP address and masquerade automatically picks an IP address on the interface traffic is leaving the router through. That makes it very useful for interfaces that receive addresses via DHCP or PPP.
Destination NAT is something completely different: it also changes IP addresses in the IP header field, but it modifies the destination IP address (and therefore redirects the packet to a different host than the original source sent it to) and not the source IP address.