Perhaps using after-init-hook
would allow the theme load to happen after whatever has fiddled around with the caret colour during initialisation?
I've seen problems with package initialisations clashing over such things (smart-mode-line and a colour theme, in my case), and this helped me.
Something like the following, perhaps (note: untested):
(add-hook 'after-init-hook
(lambda ()
(load-theme 'manoj-dark)))
At worst case you might be able to use (run-with-timer ...)
or (run-with-idle-timer ...)
(again, untested), to arrange for theme load to happen a few seconds after the end of initialisation to simulate your manual workaround. It would be kludgey, though.