C, 168 164 163 chars
Sorry if I'm a bit late to the party, but since no answer has been accepted yet, and the only other C solution was somewhat longer, here goes...
#include<stdio.h>
main(){srand(time(0));char*o="O ",r=rand()%6,i=o[r<1],j=o[r<3],k=o[r<5];printf("-----\n|%c %c|\n|%c%c%c|\n|%c %c|\n-----\n",i,j,k,o[r&1],k,j,i);}
You can remove the include and save another 18 chars, but then it doesn't compile without warnings.
Edit:
using user23241's command-line trick, the shortest C code that produces the result (without compiler warnings) is only 12 chars:
#include I
M
At least if you cheat and use the following command line to compile:
gcc -DI="<stdio.h>" -DM="main(){srand(time(0));char*o=\"O \",r=rand()%6,i=o[r<1],j=o[r<3],k=o[r<5];printf(\"-----\n|%c %c|\n|%c%c%c|\n|%c %c|\n-----\n\",i,j,k,o[r&1],k,j,i);}" dice.c -o dice
alert('-----\n|o o|\n| |\n|o o|\n-----');
is a correct program. \$\endgroup\$print("⚀⚁⚂⚃⚄⚅"(util.Random.nextInt(6)))
(utf-art). \$\endgroup\$