Hi Adrian
I think something else might be going on here.
I assume the following returns the expected values?
With LineTestImageEnView do
  ShowMessage( Layers[ 1 ].GroupIndex.ToString + '/' + Layers[ 3 ].GroupIndex.ToString );
With LineTestImageEnView do
begin
  LockUpdate();
  Layers[ 1 ].GroupIndex := 333;
  Layers[ 2 ].GroupIndex := 333;
  UnlockUpdate();
end;
With LineTestImageEnView do
  ShowMessage( Layers[ 1 ].GroupIndex.ToString + '/' + Layers[ 3 ].GroupIndex.ToString );
With LineTestImageEnView do
begin
  LockUpdate();
  Layers[ 3 ].GroupIndex := 666;
  Layers[ 4 ].GroupIndex := 666;
  UnlockUpdate();
end;
With LineTestImageEnView do
  ShowMessage( Layers[ 1 ].GroupIndex.ToString + '/' + Layers[ 3 ].GroupIndex.ToString );
Nigel 
Xequte Software
www.imageen.com