I've tried implementing a few of the contributions that members have post and not much of them performed things correctly or they were to complicated and messy to implement. So I moved forward by dissecting the OS code and followed where the functions lived.

All you have to do what edit the file catalog/includes/classes/shipping.php

Find the line with:
//if ($rates[$i]['cost'] < $cheapest['cost'])
Rem it out and replace with this one:
if ($rates[$i]['cost'] < $cheapest['cost'] && $rates[$i]['cost'] > 0)

This is basic php coding 101, select the cheapest but not ZERO!

You find the cheapest function at the bottom of the shipping.php file.

This is the default function that is called from checkout_shipping.php, I did not make this it already existed in the original package.

Cheers: Ray

More...