Here's my attempt at a patch. It now accepts "MB" and "GB" as units (non-case-sensitive) and will loop until it gets valid input, is canceled, or times out. I didn't attempt to add error messages because I only speak English, so I wouldn't be able to properly localize them.

Code:
--- /mnt/sda1/knx/master/boot/isolinux/minirtdir/init    2010-07-02 12:59:57.000000000 +0000
+++ ./init    2010-07-02 12:48:10.000000000 +0000
@@ -531,12 +531,23 @@
 }
 
 createdata(){
- local rc size avail
+ local rc size sizein sizeunits avail
  avail="$(df -m /mnt-system | awk '{size=$4}END{print size - 1}')"
  [ "$avail" -ge 200 ] 2>/dev/null || return 2
- runknoppixchroot /usr/bin/dialog --timeout 10 --inputbox "\n${CREATEIMG1}${avail}${CREATEIMG2}\n" 16 75 2>/tmp/knoppix.size; rc="$?"
- read size </tmp/knoppix.size; rm -f /tmp/knoppix.size
- [ "$rc" = "0" -a "$size" -ge 200  -a "$size" -le "$avail" ] 2>/dev/null || return 3
+ until [ "$size" -ge 200  -a "$size" -le "$avail" ] ; do
+  runknoppixchroot /usr/bin/dialog --timeout 10 --inputbox "\n${CREATEIMG1}${avail}${CREATEIMG2}\n" 16 75 2>/tmp/knoppix.size; rc="$?"
+  read sizein </tmp/knoppix.size; rm -f /tmp/knoppix.size
+  [ "x$sizein" = "x" -o "$rc" != "0" ] && return 3
+  size="$(echo $sizein | sed 's/[^0-9]//g')"
+  sizeunits="$(echo $sizein | sed 's/[^A-Za-z]//g' | awk '{print toupper($1)}')"
+  if [ "x$sizeunits" != "x" ] ; then
+   if [ $sizeunits = "GB" ] ; then
+    size=$(($size*1024))
+   elif [ $sizeunits != "MB" ]; then
+    size=0
+   fi
+  fi
+ done
  runknoppixchroot /usr/bin/dialog --yes-label "${ENCRYPT}" --no-label "${NO_ENCRYPT}" --defaultno --yesno "${QUESTION_ENCRYPT}" 16 75 2>/dev/null; rc="$?"
  [ -b /dev/loop0 ]    || mknod -m 755 /dev/loop0 b 7 0
  [ -d /KNOPPIX-DATA ] || mkdir -m 755 /KNOPPIX-DATA