Dunno if this is the same thing or not, but at some point in Windows development Microsoft added some too-clever-by-half "anti-popup" code that would prevent a program that does not have the focus from un-minimizing its windows... instead, the window's entry in the programs-bar would just blink. Perhaps there is similar logic preventing a non-foreground program from bringing its window forward?
In any case, here is some code to try, that might or might not help:
// Check to see if we are the foreground thread
DWORD foregroundThreadID = GetWindowThreadProcessId(GetForegroundWindow(), NULL);
DWORD ourThreadID = GetCurrentThreadId();
// If not, attach our thread's 'input' to the foreground thread's
if (foregroundThreadID != ourThreadID) AttachThreadInput(foregroundThreadID, ourThreadID, TRUE);
// Bring our window to the foreground
SetForegroundWindow(hWnd);
// If we attached our thread, detach it now
if (foregroundThreadID != ourThreadID) AttachThreadInput(foregroundThreadID, ourThreadID, FALSE);
// Force our window to redraw
InvalidateRect(hWnd, NULL, TRUE);