Patching is very complicated and difficult to work with, and quite unreliable if you don't follow proper MSI practices.
I use it only when I have to in order to achieve a fix that isn't possible to deliver in any other way. An example of this is if a product's uninstall sequence is broken so that the uninstall doesn't complete but goes into rollback. Then I patch with a minor upgrade to fix the error in the installed product, and then uninstall it. Most of the patches I have made this way was made with Wise Package Studio - and they worked well.
I also use patching to deliver very small fixes to released products. Typically just a single file or two with some urgent hotfixes. Any complex software release may urgently need such a patch a few weeks after main release as urgent issues are discovered in the wild and a quick fix is desired. This is to prevent large downloads for end users. And in these cases I always enable "include whole files" in order to prevent bit-level patching which is notoriously error prone.
Many people want to use patching to deliver small daily updates to QA-testers. Forget it. It is not worth the risk, certainly not the effort and saves practically no time whatsoever unless your testers are overseas. If you do need to patch for QA-testers, do not ever use bit-level patching as this will fail if they have messed around in the installation folder - which good QA-testers are likely to do.
If you need to make patches for a released product, do make sure to make good use of any available QA-testers, and have them run through patching on different platforms, upgrading from different versions, different languages, etc... It's very hard to get right. It is also adisable to not target too many prior releases with a patch since this tends to make things complicated quickly.
Overall: keep in mind that patching is designed for hotfixing. The linked article might be worth a read if you are researching the use of patching for your product. It is a bit messy, but describes several MSI patching obstacles.