A lot of these percentages are rounded. For example, a line of code might say "Choose a number between (and including) 0 to 100. If it's over 50, do something." Well, if you include 0, that's 101 numbers. So instead of being 50 / 50, it's actually 51 / 50.
Also, whenever I mention time, I'm taking the seconds listed explicitly in the game scripts. However, there's a bug with the timer that makes this inaccurate.
In short, whenever a script sets seconds, you lose the first second instantly and if you're lucky with the system clock subsecond, you'll lose another second very quickly. So, every time I mention "seconds," real time will actually be between one and (almost) two seconds faster.
Here are some script comments from ScummVM with technical details.
When Script:seconds is set, the first second is deducted on the next doit except in some cases when there are stale values from a previous delay. A one second delay is usually no delay at all. Subsequent seconds are deducted whenever the seconds value of the system clock changes. This means that the duration of the 2nd "second" depends on the system clock's subsecond value when the delay was requested. A script that requests a two second delay usually gets a random delay between zero and one second.
COPY PROTECTION (Floppy Only) At the bandit camp, the witch's house, and the mountain path, there's a 25% chance of getting copy protection. These rolls are independent from each other.
If you get to the boat and haven't had any copy protection, you automatically get it here. Otherwise, you don't get it here. There is no dice roll.
WITCH There's a 50% chance of her appearing on any screen (other than the first when you enter the forest). If you manage to get in front of her house, she will automatically show up there.
THE CASTLE Cassie will show up somewhere between 20 and 40 seconds. It's unclear to me whether this is from the time the room loads or whether it's when you get control of Graham.
If you're in a room where the blue beast can show up, the following will happen:

Make a random roll to see if the blue beast appears.

If that roll fails, and you're in a room where the cat can show up, then it will do another roll to see if the cat appears. This second roll is always 80% in favor of the cat appearing. (The overall chance of the cat appearing is less than 80%, because we have to take the first roll into account.)

If the blue beast roll from step 1 succeeds, then the game picks a random wait time.

After that time, it checks to see if Graham is within certain xy coordinates. If Graham's in the right spot, then the blue beast appears. If not, then the game goes back to step 3, picks another random wait time, checks again, and so on, until either the blue beast appears or Graham leaves the room.
Blue beast wait times are written as inclusive.
Organ Room 50% chance of blue beast 24 seconds Need to be between the two red lines
North Dining room 75% chance of blue beast 410 seconds Need to be above the red line
South dining room 75% chance of blue beast when entering from the north 20% chance of cat when entering from the north 50% chance of blue beast when entering from the left 40% chance of cat when entering from the left 410 seconds Need to be to the right of the red line
Bottom of stairs 50% chance of blue beast There are no x/y coordinate requirements for the beast appearing 410 seconds Under certain conditions that I can't decipher, the cat has a 60% chance of appearing (these conditions involve global variables and I don't know what they refer to)
Bedroom 10% chance of Mordack 56% chance of cat. This one is odd because there are actually three dice rolls. Roll to see if Mordack is there. If not, roll to see if we do another dice roll. If that succeeds, roll to see if the cat shows up.