The problem is that there are various scenarios in which Vim will reload the colour scheme such as using `:colorscheme` or `:syntax enable`.

Colour schemes should always start with `:highlight clear` to clear all existing highlight groups. Why? See what happens when you do:

    :highlight Test ctermfg=red
    :highlight Test ctermbg=blue

What is `Test` now set to?

-----------

To fix this, you should always hook in to the `ColorScheme` autocommand when you define highlight groups:

    fun! s:highlight()
        highlight Foo ctermbg=red
    endfun
    
    augroup myplugin_highlight
      autocmd!
      autocmd ColorScheme * call s:highlight()
    augroup end
    call s:highlight()

I used a function because we want to run this *both* on startup *and* when the `ColorScheme` autocommand is fired.

It's a bit ugly, but it's the only way.