If the OP is correct in his assertion (correlation != causation and all that) this means either they broke sha256 (or do they use 512? I forget) or they are just brute forcing a loss. It is highly unlikely that they broke SHA256 or 512. Therefore they would have to use the wager size tracking and brute force a loss when they decide they want a losing wager.
If they are brute forcing a loss then the response times from the server for larger wager losing bets would vary because it would have to do more operations to return the response.
Well of course they didn't break SHA256/512. If they did they wouldn't be running a scam dice site, they'd just empty any bitcoin address that exists any time they wanted some bitcoin.
As for the server times varying, "brute forcing" the seed would take no time at all. I'm going to simplify their process, because theirs invoves double hashing, then reading the first 3 bytes, converting it to an integer, checking it's value, then using just the last 6 digits. Too much work for a forum example.
So for my example of how "hard" it is to brute force a sha256 seed to make you lose a roll, our bitcointalk-dice site will generate your roll by double sha256'ing the seed. The client seed and nonce are irrelevant for this example, since they wouldnt change. After it's double sha'ed, we will use the first four numbers that appear to get your roll, and divide by 100, so you'll get 00.00-99.99. Also, for brevity, the server seeds will just be random words I feel like picking instead of 32 character strings that clutter up the screen.
So, you're betting 50/50, on low. Server seed is 'ripoff'. Double sha256 the word ripoff (as a string) and you get:
d7ec963e8d5eb5bd118fa809c05abc56d47f77a1a4d421db180b3bf4add8ed80
First four numbers are 7963 so your roll is 79.63. You lose.
Next roll your seed is 'theft'. Result:
30d5dd57f28d02756aa06a71d40b4f300241e5c8323ffb596f9609d630decf5f
First four are 3055 so your roll is 30.55. You win. Ok, now the server thinks you're winning too much, time for you to start losing.
Next seed is 'scam':
92eeea29311e699e209c3127d18f13e7711c1ff903162e4bbe5ab551429ed737
92.29 - a loss. Luck was on our side this time. Lets take back some of those "winnings" we let you have.
Next seed is 'arrogant':
b13e51f886ed5ca336191d8e65fd2f6c0adf43c379af0d60215c8623008ffb89
13.51 - a win... but we want you to lose, and you didn't save the hash for 'arrogant' so lets change the seed to, new random word, 'cheat':
b2a1f658776f82f8e7fb704b3a060773bc24423dc6d0298da55eeea0eb31224d
21.65, damn, ok, try again, 'liar':
6429f62ea32edf61a0d684c5c5be80d71c82385fdaa0eae88aa1a9acc4a3a833
There we go, 64.29, you lose, sorry man. The seed was 'liar', you can be sure we didn't cheat by making sure it hashes out correctly, and you can validate we didn't change the seed by checking the hash we provided before you made the bet.
Oh, you didn't click the button? Sorry. Guess you just gotta trust us.
My point being, 'brute forcing' a sha256/512 to get a random dice number you want is simple. The odds of them finding one that works for them is exactly the same as your chance to lose. It might take 15-20 tries to find a losing hash if you're betting 95% wins, but that would take a server microseconds, tops. You'd never notice it. The TCP overhead and standard traffic time is millions of times faster than the time it'd take to hash it out.
On my mid to high end server I ran those hashes on, I just took the microtime, double hashed a random number 300 times, then checked how long it took.
.000703811 seconds.
.7 milliseconds.
My desktop pings to 999dice.com are about 170milliseconds.
In the time it takes a ICMP packet to hit 999dice and come back, they could have hashed over 72,857 guesses.
It's not hard, and if using timestamps as your basis, it's completely undetectable.
Even worse - if you never change your client seed (something I always did on every roll when using the API), they can save hashes in advance. Need the roll to be 98.55? Pull saved entry number 13,872, that one was 98.55.