Yang pertama saya lihat adalah "sangat mungkin" design tabel database kamu yang salah. matapelajaran tidak seharusnya memiliki table sendiri2 seperti tabel matematika. tapi cukup tabel "matapelajaran", table nilai seharusnya hanya ada dalam satu table "nilai" tidak tersebar di beberapa table.
Ask1) bisa ada kesalahan dari kode yang kamu buat, jika kamu menggunakan OOP maka kamu bisa buat Unit Test dengan PHPunit untuk memastikan kebenaran kodemu. Perbanyaklah test kode phpmu.
ASk2) bisa saja terjadi jika kamu tidak menggunakan database transaction. Gunakanlah database transaction untuk menutuk kemungkinan ini.
Ask3) lemah tidaknya sebuah sistem, tergantung dari beberapa aspek. Saya tidak bisa bilang sistem kamu lemah atau tidak. Yang jelas ada bug dalam perhitungan nilai mahasiswa.