What you're doing looks fine, but the BLFSpeedDials are currently read-only in CMShell.
Sorry for the inconvenience. We're currently working hard to implement full read/write support of all CUCM-objects for the upcoming release. You're bug reports help us a great deal with that.
We prepared a script that contains 2 script-cmdlets: Set-CMDeviceProfile_Fixed and New-CMDeviceProfile_Fixed. They will execute the normal CMShell-cmdlet, but in addition will perform a thin-axl update of the missing associations (BLFSpeedDials and also BLFDirectedCallParks). You can use these two cmdlets temporarily to update your deviceprofiles. After dot-sourcing the script to your session/script you can use the script-cmdlets like any other CMShell-cmdlet. Hopefully that will suffice for the time being.
You will find the script attached to this post. Please remove the .txt extension from the file before use.