VRAMを割り当てるときに、いくつかのモードはCPU(バス)に接続されなくなりますので、表示していない時間(VBlank期間等)にCPUに接続されているモードに変えて内容を書き換え、また戻しておく必要があるみたいです。

{
vramSetBankE(VRAM_E_LCD);
u16 *pdstpals=(u16*)VRAM_E_EXT_PALETTE;
for(u32 idx=0;idx<(16*256);idx++) pdstpals[idx]=colors[idx] | BIT15;
vramSetBankE(VRAM_E_OBJ_EXT_PALETTE);
}

ぜんぜんコンパイルしていない上に、VRAM_E_LCDとかVRAM_E_EXT_PALETTEは初めて見たのですが、たぶんこんな感じで更新できるんじゃないかと思います。