Sadly, I don't have quite enough to go on. Can we simplify the problem?
Set aside the decision logic. Can you write the simplest possible SL application that (a) reads an OssMarginMonth, (b) modifies it, and (c) saves it?
The application should do nothing else except launch, read, modify, and save.
If you still get the error, we'll ask that you send us something we can investigate here. Unfortunately, we can't manage an entire application. We need to work with something a bit more focused. Accordingly, we'll ask that you
1) Strip it down to a one table database with just OssMarginMonth
1a) Enter a few rows of sample data
2) Rebuild the sample (as just described) to talk to that toy database
3) Reproduce the error again
4) Zip it all up and send it to us
We regret that you're having trouble. Hope we can get this resolved quickly.