I've made an alteration to the standard mail_html.php file as I didn't see the point of sending a complete copy of the whole invoice every time an order status was updated.
This now sends a shorter email stating the change in status plus the message in the Description field of the Configuration->Order Statuses option.
Orders Statuses that receive full emails can be added to this line 68:
		$receive_full_mail_statuses = array("C", "X", "P");
Thought I'd post it in case it was useful to anyone else.
Here's the full code.:
<?php
/**
 *
 * Layout for the shopper mail, when they have confirmed an order
 *
 * The addresses are reachable with $this->BTaddress, take a look for an example at shopper_addresses.php
 *
 * With $this->orderDetails['shipmentName'] or paymentName, you get the name of the used paymentmethod/shipmentmethod
 *
 * In the array order you have details and items ($this->orderDetails['details']), the items gather the products, but that is done directly from the cart data
 *
 * $this->orderDetails['details'] contains the raw address data (use the formatted ones, like BTaddress). Interesting information here is,
 * order_number ($this->orderDetails['details']['BT']->order_number), order_pass, coupon_code, order_status, order_status_name,
 * user_currency_rate, created_on, customer_note, ip_address
 *
 * @package	VirtueMart
 * @subpackage Cart
 * @author Max Milbers, Valerie Isaksen
 *
 * @link http://www.virtuemart.net
 * @copyright Copyright (c) 2004 - 2010 VirtueMart Team. All rights reserved.
 * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
 * VirtueMart is free software. This version may have been modified pursuant
 * to the GNU General Public License, and as distributed it includes or
 * is derivative of works licensed under the GNU General Public License or
 * other free or open source software licenses.
 *
 */
// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die('Restricted access');
?>
<html>
	<head>
		<style type="text/css">
			body, td, span, p, th {  }
			table.html-email {margin:2px auto;background:#fff;border:solid #dad8d8 1px;font-size: 16px;}
			.html-email tr{border-bottom : 1px solid #eee;}
			span.grey {color:#666;}
			span.date {color:#666; }
			a.default:link, a.default:hover, a.default:visited {color:#666;line-height:25px;background: #f2f2f2;margin: 10px ;padding: 3px 8px 1px 8px;border: solid #CAC9C9 1px;border-radius: 4px;-webkit-border-radius: 4px;-moz-border-radius: 4px;text-shadow: 1px 1px 1px #f2f2f2;font-size: 12px;background-position: 0px 0px;display: inline-block;text-decoration: none;}
			a.default:hover {color:#888;background: #f8f8f8;}
			.cart-summary{ }
			.html-email th { background: #ccc;margin: 0px;padding: 2px;}
			.sectiontableentry2, .html-email th, .cart-summary th{ background: #ccc;margin: 0px;padding: 10px;}
			.sectiontableentry1, .html-email td, .cart-summary td {background: #fff;margin: 0px;padding: 0px;}
			.line-through{text-decoration:line-through}
		</style>
	</head>
	<body style="background: #F2F2F2;word-wrap: break-word;">
		<div style="background-color: #e6e6e6;" width="100%">
			<table style="margin: auto;" cellpadding="0" cellspacing="0" width="100%" >
				<tr><td>
					<?php
		// Shop desc for shopper and vendor
					echo $this->loadTemplate('header');
		$cur_order_status = $this->orderDetails['details']['BT']->order_status;
		$cur_order_no = $this->orderDetails['details']['BT']->order_number;
		$db = JFactory::getDBO();
		$qrydata = "SELECT order_status_description FROM #__virtuemart_orderstates WHERE order_status_code ='".$cur_order_status."'";
		$db->setQuery($qrydata);
		$db->query();
		$order_status_description = $db->loadResult();
		// ADD ORDER STATE LETTERS TO THIS ARRAY WILL SHOW FULL EMAIL
		$receive_full_mail_statuses = array("C", "X", "P");
		if( in_array($cur_order_status, $receive_full_mail_statuses) ) {
		// Message for shopper or vendor
					echo $this->loadTemplate($this->recipient);
		// render shipto billto adresses
					echo $this->loadTemplate('shopperaddresses');
		// render price list
					echo $this->loadTemplate('pricelist');
		// more infos
					echo $this->loadTemplate($this->recipient . '_more');
		// end of mail
		}
		else {
			echo "Your order number.".$cur_order_no." has Changed Status<br />New Status : ";
			switch ($cur_order_status) {
				// STANDARD VM2 ORDER STATUSES
				case "C";
					{
						echo strtoupper( JText::_("COM_VIRTUEMART_ORDER_STATUS_CONFIRMED") );
						break;
					}
				case "X";
					{
						echo strtoupper( JText::_("COM_VIRTUEMART_ORDER_STATUS_CANCELLED") );
						break;
					}
				case "P";
					{
						echo strtoupper( JText::_("COM_VIRTUEMART_ORDER_STATUS_PENDING") );
						break;
					}
				case "R";
					{
						echo strtoupper( JText::_("COM_VIRTUEMART_ORDER_STATUS_REFUNDED") );
						break;
					}
				case "S";
					{
						echo strtoupper( JText::_("COM_VIRTUEMART_ORDER_STATUS_SHIPPED") );
						break;
					}
				case "U";
					{
						echo strtoupper( JText::_("COM_VIRTUEMART_ORDER_STATUS_CONFIRMED_BY_SHOPPER") );
						break;
					}
				// END OF STANDARD VM2 ORDER STATUSES
				// ADD ANY NON STANDARD STATUSES YOU HAVE HERE
				case "E";
					{
						echo "PROCESSED";
						break;
					}
				case "F";
					{
						echo "READY FOR COLLECTION";
						break;
					}
				case "L";
					{
						echo "COLLECTED";
						break;
					}
				default: {
						echo "";
				}
			}
			echo "<br />";
			echo $order_status_description != "" ? nl2br($order_status_description):"";
			echo "<br />";
		}
					echo $this->loadTemplate('footer');
					?>
				</td></tr>
			</table>
		</div>
	</body>
</html>
			
			
			
				Thank you for this. This is almost what I was looking for. It will certainly help a lot. 
Do you have any idea how could I adapt this code so that it would load different templates for different order status?
Currently I managed to insert different templates (template is called mail_html_pending) with :
echo $this->loadTemplate('pending'); 
         
case "P";
					{   
					echo strtoupper( JText::_("COM_VIRTUEMART_ORDER_STATUS_PENDING") );
						echo $this->loadTemplate('pending'); 
						break;
					};
However I still have problem, since I would like to put this template in front of order status. Currently I get mail with header, order status, my template + footer...
 If I could somehow remove this part:
else {
			echo "Your order number.".$cur_order_no." has Changed Status<br />New Status : ";
			switch ($cur_order_status) {
I tryed with just eco, I tryed different combinations but I get error when sending....
Or if I could somehow load template in front of this order status statement....
Any suggestions?
			
			
			
				Hi sfinx,
Hope I understand correctly what you are after.
Either move this line:
echo "Your order number.".$cur_order_no." has Changed Status<br />New Status : ";
Inside each of the case statements where you want it to appear and leave it out of the ones you don't.
e.g.
				case "P";
					{
						echo strtoupper( JText::_("COM_VIRTUEMART_ORDER_STATUS_PENDING") );
						echo $this->loadTemplate('pending'); 
						echo "Your order number.".$cur_order_no." has Changed Status<br />New Status : ";
						break;
					}
OR if this is only for pending orders you could add an "if" statement around the status change message.
e.g.
else {
			if ($cur_order_status != 'P') {
				echo "Your order number.".$cur_order_no." has Changed Status<br />New Status : ";
			}
			switch ($cur_order_status) {
OR if you want the message after all statuses move the status message to after the case statement.
e.g. to here
			echo "Your order number.".$cur_order_no." has Changed Status<br />New Status : ";
			}
			echo "<br />";
			echo $order_status_description != "" ? nl2br($order_status_description):"";
			echo "<br />";
Hope this helps.
			
			
			
				Thank you for this again, however in the mean time I managed to achive this, by copying everything from this part at the bottom of your code:
// ADD ORDER STATE LETTERS TO THIS ARRAY WILL SHOW FULL EMAIL
		$receive_full_mail_statuses = array("C", "U");
		if( in_array($cur_order_status, $receive_full_mail_statuses) ) {
		// Shop desc for shopper and vendor
			echo $this->loadTemplate('header');
I know this is probably not smartest solution, but it was all I could manage and it is working, so I guess I will leave it at that.
So what I did was:
I deleted all text calling your order status. I made 2 different header files, so they are called depending on status.  I deleted everything in mail_html_shopper.php since it was automaticly loaded after header and I couldnt find the line that is calling it. 
For Order status confirmed by shoper I than created seperate file (mail_html_podatki) that has original shopper.php  code in it and loaded it after header. 
In case of different statuses I will than just replace podatki  (in case of shiped statusm it is called shiped) with appropriate template and place it where I want it to be. 
hopefully that makes sense. Here is my current code:
			<table align="center"  cellpadding="0" cellspacing="0">
				<tr><td>
					<?php
		
		$cur_order_status = $this->orderDetails['details']['BT']->order_status;
		$cur_order_no = $this->orderDetails['details']['BT']->order_number;
		$db = JFactory::getDBO();
		$qrydata = "SELECT order_status_description FROM #__virtuemart_orderstates WHERE order_status_code ='".$cur_order_status."'";
		$db->setQuery($qrydata);
		$db->query();
		$order_status_description = $db->loadResult();
		// ADD ORDER STATE LETTERS TO THIS ARRAY WILL SHOW FULL EMAIL
		$receive_full_mail_statuses = array("C", "U");
		if( in_array($cur_order_status, $receive_full_mail_statuses) ) {
		// Shop desc for shopper and vendor
			echo $this->loadTemplate('header');
			// Message for shopper or vendor
					echo $this->loadTemplate($this->recipient);
		// render shipto billto adresses
					echo $this->loadTemplate('podatki');
		// render shipto billto adresses
					echo $this->loadTemplate('shopperaddresses');
		// render price list
					echo $this->loadTemplate('pricelist');
		// more infos
					echo $this->loadTemplate($this->recipient . '_more');
		// end of mail
		}
		else {
			echo " ";
			switch ($cur_order_status) {
				// STANDARD VM2 ORDER STATUSES
				case "C";
					{
						echo strtoupper( JText::_("") );
						break;
					}
				case "X";
					{
						
						echo strtoupper( JText::_("") );
						break;
					}
				case "P";
					{   
					echo strtoupper( JText::_("") );
						break;
					}
				case "R";
					{
						
						echo strtoupper( JText::_("") );
						break;
											}
				case "S";
					{
						echo strtoupper( JText::_("") );
						break;
					}
				case "U";
					{
						echo strtoupper( JText::_("") );
						break;
					}
				// END OF STANDARD VM2 ORDER STATUSES
				// ADD ANY NON STANDARD STATUSES YOU HAVE HERE
				
				case "F";
					{
						echo "READY FOR COLLECTION";
						break;
					}
					default: {
						echo "";
				}
			}
			echo "<br />";
			echo $order_status_description != "" ? nl2br($order_status_description):"";
			echo "<br />";
		}
		// SEND ORDER
			$receive_full_mail_statuses = array("S", "P");
			if( in_array($cur_order_status, $receive_full_mail_statuses) ) {
		// Shop desc for shopper and vendor
			echo $this->loadTemplate('head');
			// Message for shopper or vendor
					echo $this->loadTemplate($this->recipient);
		// render shipto billto adresses
					echo $this->loadTemplate('shiped');
		// render shipto billto adresses
					echo $this->loadTemplate('shopperaddresses');
		// end of mail
		}
		else {
			echo " ";
			switch ($cur_order_status) {
				// STANDARD VM2 ORDER STATUSES
				case "C";
					{
						echo strtoupper( JText::_("") );
						break;
					}
				case "X";
					{
						
						echo strtoupper( JText::_("") );
						break;
					}
				case "P";
					{   
					echo strtoupper( JText::_("") );
						break;
					}
				case "R";
					{
						
						echo strtoupper( JText::_("") );
						break;
											}
				case "S";
					{
						echo strtoupper( JText::_("") );
						break;
					}
				case "U";
					{
						echo strtoupper( JText::_("") );
						break;
					}
				// END OF STANDARD VM2 ORDER STATUSES
				// ADD ANY NON STANDARD STATUSES YOU HAVE HERE
				
				case "F";
					{
						echo "READY FOR COLLECTION";
						break;
					}
							default: {
						echo "";
				}
			}
			echo "<br />";
			echo $order_status_description != "" ? nl2br($order_status_description):"";
			echo "<br />";
		}
					echo $this->loadTemplate('footer');
					?>
                    
				</td></tr>
			</table>
			
			
			
				Thank you for sharing.