In an event based simulation, things only happen when there is an event, which is defined as a change on a variable or a specified amount of time passing. Even though you might have modeled something as level sensitive, the simulator only executes code when the level changes.
The problem with removing the negedge qualifier on reset is that there is no check to see which event caused the process to unblock. "@reset" means wait for any change on reset. So a change on reset from 0 to 1 will cause the if statement to execute the same as a posedge clk. Adding negedge reset filters the change the simulator is looking for to only 1 to 0.
- - - Updated - - -
FvM, as far as I know, no commercial tool claims to support this IEEE 1364.1 synthesis standard.