Here is my tutorial on how im upgrading WHMCS, if you have Yours or have ideas how to improve mine, please share..

0. Put site into maintenance mode, so no client can access it and make changes in database
0.5. Disable cron tasks in your hosting control panel (if some was set)
1. Backup files, backup mysql !!!!!
2. Download newest WHMCS package from whmcs.com / client area / support / downloads or from your hosting provider.
3. Upload whmcs .ZIP package to your hosting directory and unpack it
4. If it was unpacked into /public_html/whmcs, move it to the /public_html overwriting old files you already backed up
5. Now go to yourwebsite.com/admin , this will execute upgrade
6. Once done remove /install/ folder
7. Test your essential modules (cpanel, etc..) that they works
8. It is done, but you may now see default WHMCS template on your main page, if you did some changes in your website template, uploaded some images, changed language files here are the files you may want to recover, work with:


/lang/
/templates/yourcustomizedtemplate <-- if your customized template name is "default" etc., it might got overwriten by default one
/templates/orderforms/yourcustomizedtemplate <-- if you changed something there, it is templates for order forms
/images/ <-- ensure your images from old WHMCs are there after upgrade
/filename.html <-- in case you created custom pages, ensure they are in place


You may rename lang, templates, images folder to example: "templates_deafultv3.5" and then reupload your old customized "templates" folder, after uploading old templates folder your website template should be changed to your old one customized. You should probably still use software like CSDiff (great folders comparison) or DiffNow (online) to at least compare differences in new and old /templates/yourcustomizedtemplate folder to prevent any inconsistence, errors if WHMCS made important changes in template files?

9. If things look inacceptable, you can delete your files and mysql and restore backup, OR you can allow people to start modifying your database and using site by disabling maintenance mode enabled in step 1 and enable cronjobs disabled in step 0.5 (verify cronjobs are handled same way in new WHMCS)

----------------
So in short how to upgrade WHMCS:
- make site inaccessible
- backup files, mysql
- upload new whmcs files and overwrite old
- run upgrade going to /admin
- upload your customized template folder in /templates and ensure your /lang files wont loose your customisations. Here comes CSDiff or other file comparison tools which tells what was added and what removed in files.
- verify site addons/modules working
- make site accessible via public or restore backups (deleting all files and mysql before restore) - first making sure backups are OK.

----------------
My modiffied file list:

default vs defaultcz file match? | file path | description of custom changes made in the file
y | /templates/default/clientareahome.tpl | custom message to clients
y | /templates/default/contact.tpl | online chat button
n | /templates/default/footer.tpl
n | /templates/default/header.tpl
n | /templates/default/homempage.tpl
y | /templates/default/viewinvoice.tpl | alternat. pament
y | /templates/default/whmcslogo.png
y | /templates/default/css/bootstrap.css | white menu text links color
n | /lang/english.php |
n | /lang/czech.php |
y | /templates/orderforms/verticalsteps/configureproduct.tpl
y | /templates/orderforms/verticalsteps/products.tpl
find1:
{foreach key=num item=product from=$products}
insert before

find2:
<p><img align="left" src="http://internetlifeforum.com/images/padlock.gif
insert before

y | /templates/orderforms/verticalsteps/viewcart.tpl
find:
gateway.name}</label> {/foreach}</p>
insert after:
{if $language == czech }
{$LANG.custorderformsczaltpay}
{else}
{$LANG.custorderformsenaltpay}
{/if}

My Czech template (defaultcz) only differs in files header,footer,homepage,other differences in /lang/* file