We have found out why this issue occurred.
During our investigation we found that SQL Server has a problem with a specific isolation level setting. Please find the below article (http://support.microsoft.com/KB/2674636/EN)
The isolation level is the degree to which one transaction must be isolated from other transactions. The level at which a transaction is prepared to accept inconsistent data is termed the isolation level. There are 5 types of Isolation level:
1. READ UNCOMMITTED-Specifies that statements can read rows that have been modified by other transactions but not yet committed.
2. READ COMMITTED-Specifies that statements cannot read data that has been modified but not committed by other transactions
3. REPEATABLE READ-Specifies that statements cannot read data that has been modified but not yet committed by other transactions and that no other transactions can modify data that has been read by the current transaction until the current transaction completes.
4. SNAPSHOT-Specifies that data read by any statement in a transaction will be the transactionally consistent version of the data that existed at the start of the transaction
5. SERIALIZABLE-Specifies that statements cannot read data that has been modified but not yet committed by other transactions, no other transactions can modify data that has been read by the current transaction until the current transaction completes
READ COMMITTED is the default isolation level for SQL Server.
Investigating on this point we found that our databases on all environments except production is set to READ COMMITTED, while production is set to READCOMMITTEDSNAPSHOT. Based on the above knowledge base we can see that database with READCOMMITTEDSNAPSHOT isolation level behave differently with LOB objects. When a forwarded versioned record is deleted on a page, the record type on the page is changed to GHOST_VERSION_RECORD. However, the corresponding Page Free Space (PFS) page does not indicate that the page contains a ghost record. This causes the page to prevent the database file from being reduced in size.This is very similar to our case. This problem has been fixed in SQL Server 2008 R2 Cumulative Update 13.
So the solution we used here was to set the database which exhibited this behaviour to READ COMMITTED