Hmmm. Maybe this is a MySQL bug?
In postgresql, I get this:
smarlowe=# create table test (id int, score float);
CREATE TABLE
smarlowe=# insert into test values (0,98.5);
INSERT 5020790 1
smarlowe=# insert into test values (0,79.3);
INSERT 5020791 1
smarlowe=# select avg(score) from test group by id;
avg
88.9
(1 row)
smarlowe=# insert into test values (0,NULL);
INSERT 5020792 1
smarlowe=# select avg(score) from test group by id;
avg
88.9
(1 row)
MySQL seems to make some other bad decisions regarding nulls as well.
I'd recommend switching to a real database, but that's just my opinion.