The problem is that you are blocking the UI thread, which is the thread responsible for doing the redrawing of your form, so nothing gets redrawen during the 3 seconds you are waiting (Try draging your form around during these 3 seconds and you'll see it's totally unresponsive).
There are loads of ways of dealing with this, but the basic premise is that firstly you need to do your waiting on a background thread so your UI thread remains responsive (Options include using a BackgroundWorker, a Timer, the ThreadPool, a Thread or the TPL TaskFactory). Secondly, you must remember that any update to the UI must be done on the UI thread, so you must switch back to your UI thread (Using .Invoke() or a TaskScheduler) before you hide the picture box at the end.
This example uses the TPL (Task Parallel Library):
// Start by making it visible, this can be done on the UI thread.
pb_elvisSherlock.Visible = true;
// Now grab the task scheduler from the UI thread.
var uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
// Now create a task that runs on a background thread to wait for 3 seconds.
Task.Factory.StartNew(() =>
{
Thread.Sleep(3000);
// Then, when this task is completed, we continue...
}).ContinueWith((t) =>
{
//... and hide your picture box.
pb_elvisSherlock.Visible = false;
// By passing in the UI scheduler we got at the beginning, this hiding is done back on the UI thread.
}, uiScheduler);