Well, Tom, I think you can imagine that assigning negative values to a float variable does certainly work. So the bug lures on a different place, not the assignment.
How do you get knowledge of the actual value? Debugger output?? sprintf()???
When sprintf() make sure Buffer large enough, heap size set to 0x0200 and newlib nano float formatting enabled.
Can you verify (by setting an address breakpoint) that no write access happens unwanted to your variables?